【问题标题】:SQL Server trim before and after specific valuesSQL Server 在特定值之前和之后修剪
【发布时间】:2022-01-11 23:23:16
【问题描述】:

我有一个数据库,其中有一列包含一个长字符串,我正在寻找一种方法来仅提取其中的一部分。

这是一个示例:

{
    "vendorId": 53,
    "externalRef": "38828059 $567.82",
    "lines": [{
        "amount": 0,
        "lineType": "PURCHASE",
        "lineItemType": "INVENTORY",
        "inventory": {
            "cost": 0,
            "quantity": 1,
            "row": "6",
            "seatType": "CONSECUTIVE",
            "section": "102",
            "notes": "http://testurl/0F005B52CE7F5892 38828059 $567.82 ,special",
            "splitType": "ANY",
            "stockType": "ELECTRONIC",
            "listPrice": 0,
            "publicNotes": " https://brokers.123.com/wholesale/event/146489908 https://www.123.com/buy-event/4897564 ",
            "eventId": 3757669,
            "eventMapping": {
                "eventDate": "",
                "eventName": "Brandi Carlile: Beyond These Silent Days Tour",
                "venueName": "Gorge Amphitheatre"
            },
            "tickets": [{
                "seatNumber": 1527
            }]
        }
    }]
}

我要提取的只是 http://testurl/0F005B52CE7F5892

有人能帮助我了解如何调用我的查询的语法,它将创建一个新的临时列并为我提供此列中每一行的提取值吗?

我使用的是 SQL Server 2008,所以一些较新的功能对我不起作用。

【问题讨论】:

  • 是mysql还是sql server的问题?它们不是一回事。
  • 我删除了 mysql 标签,因为 OP 写道他们使用 Microsoft SQL Server 2008。我的理解是 Stack Overflow 建议用户为任何与 SQL 相关的问题添加 mysql 标签。
  • SQL Server 2008 已经完全不支持 2 年多了,您应该考虑紧急升级!这样做的好处是您将能够使用 inbuilt JSON functions 来解析您的 JSON。如果您无法使用CHARINDEXSUBSTRING 使用一些非常丑陋的字符串解析技术,但SQL Server 并不是真正为此而构建的,因此如果您可以升级或在SQL 之外执行此操作,那将会非常,容易多了。
  • 您可以使用一些函数来获取该信息,例如sqlservercentral.com/articles/a-function-to-split-json-data
  • 那不是 not JSON, @HoneyBadger 。问题是,如果 OP 将其视为 JSON,而不是“长字符串”,那么他们将拥有更轻松的时间。不幸的是,2008 不支持 JSON,但它也完全不受支持,因此需要能够使用 JSON 只是他们应该升级的另一个原因。尽管有 解决方案使用非内置的 JSON。例如,如果 OP 真的愿意,他们可以走 CLR 路线。

标签: sql sql-server-2008


【解决方案1】:

将您的 Sql Server 升级到受支持的版本。

但在那之前,我们可怜那些敢于面对只用旧的字符串函数处理 Json 的恐怖的人。

select 
  [notes_url] = 
    CASE 
    WHEN [json_column] LIKE '%"notes": "http%'
    THEN substring([json_column], 
           patindex('%"notes": "http%', [json_column])+10, 
             charindex(' ', [json_column] , 
               patindex('%"notes": "http%', [json_column])+15)
               - patindex('%"notes": "http%', [json_column])-10)
    END
from [YourTable];

db小提琴here

【讨论】:

  • 这非常有效。谢谢!
猜你喜欢
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多