SQL服务器trim前后具体值

SQL Server trim before and after specific values

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

这是一个示例:

{
    "vendorId": 53,
    "externalRef": "38828059 7.82",
    "lines": [{
        "amount": 0,
        "lineType": "PURCHASE",
        "lineItemType": "INVENTORY",
        "inventory": {
            "cost": 0,
            "quantity": 1,
            "row": "6",
            "seatType": "CONSECUTIVE",
            "section": "102",
            "notes": "http://testurl/0F005B52CE7F5892 38828059 7.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,所以一些较新的功能对我不起作用。

将您的 SQL 服务器升级到受支持的版本。

但在那之前,我们可怜那些敢于面对仅使用旧字符串函数处理 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<>fiddle here