【发布时间】: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。如果您无法使用
CHARINDEX和SUBSTRING使用一些非常丑陋的字符串解析技术,但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