【发布时间】:2021-03-18 08:23:16
【问题描述】:
我正在使用 SQL Server 2016,我在其中一个 nvarchar(max) 类型列中加载 JSON 响应。
现在我想创建一个派生列,甚至是一个视图,它会在完整的 JSON 响应中找到特定值,并仅在新的派生列中显示该值。
例子:
**Complete_JSON_Repsone** --> this is SQL column
{"result":{"banner_image_light":"","country":"USA","parent":"","notes":"","stock_symbol":"","u_op_dev_version":"","u_restriciton":"No","discount":"","sys_id":"7a2c008c1b07ac50a62cea0ce54bcbe8","market_cap":"0","customer":"false"}}
我尝试了下面的查询,但它没有给出预期的结果它打印出sys_id之后的所有内容:
SELECT
Substring (
a.Complete_JSON_Repsone,
Charindex( '"sys_id":', Complete_JSON_Repsone) + 1,
Len(Complete_JSON_Repsone)
) AS [Sys_Idd]
FROM <table-name> a
当前输出(实际结果):
Sys_Idd
sys_id":"7a2c008c1b07ac50a62cea0ce54bcbe8","market_cap":"0","customer":"false"}}
预期输出:
Sys_Idd
7a2c008c1b07ac50a62cea0ce54bcbe8
更新
示例输入:
Create table dbo.log1
(
Id varchar(50),
Complete_JSON_Response nvarchar(max),
Sys_Id varchar(50)
)
insert into dbo.log1 (Id,Complete_JSON_Response)
values ('S1','{"result":{"banner_image_light":"","country":"USA","parent":"","notes":"","stock_symbol":"","u_op_dev_version":"","u_restriciton":"No","discount":"","sys_id":"7a2c008c1b07ac50a62cea0ce54bcbe8","market_cap":"0","customer":"false"}}')
,('S2','{"result":{"banner_image_light":"","country":"Aus","parent":"","notes":"","stock_symbol":"","u_op_prod_version":"","u_restriciton":"No","discount":"","sys_id":"5b2c008c1b07ac50a62cea0ce54bcbe8","market_cap":"1","customer":"TRUE"}}')
select * from dbo.log1
在上面的选择查询打印中,Sys_id 列的 NULL 值作为该列的值,最初未插入。我在预期输出中想要的是,它应该只填充(导出)从 Complete_JSON_Response 列到 Sys_id 列的 sys_id 值,而不是 NULL
预期输出:
Id Sys_Id
S1 7a2c008c1b07ac50a62cea0ce54bcbe8
S2 5b2c008c1b07ac50a62cea0ce54bcbe8
【问题讨论】:
-
当您说 JSON 是动态的时,它的动态是什么?按键和整体结构至少保持不变吗?你用的是SQL2016+吗?
-
@Charlieface 我已经更新了我的第一篇文章。请检查我的确切要求。谢谢。
-
JSON_VALUE应该为您解决问题,它不起作用吗?
标签: sql json sql-server tsql