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
我有一个数据库,其中有一列包含很长的字符串,我正在寻找一种方法来仅提取其中的特定部分。
这是一个示例:
{
"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