我有这个问题,表中有一个字符串列,里面的数据是混合但不变的。
例如
{ "Supervisor": "you", "Number_SAP": "33333333333", "SUPPORT_level":"on,NBD2222x5; KeepYourHardDrive-MultiDrive PCYourDriveYour", "SUPPORT_active": "1999-01-31", "SUPPORT_required": false, "Power_Consumption":0, and many others}
它们在不同行中的排列方式不同,顺序可能不同,例如
{ "Power_Consumption": 4, "Number_SAP": "22222222222222", "SUPPORT_level": "OFF,ddd333222x5; MultiDrive", "SUPPORT_active": "2000-01-31","Supervisor": "ME", "SUPPORT_required": "True", and many others.}
如何仅将其想要的值分发到列,例如
列名:
功耗 | SAP 否 | 支持 |
---|---|---|
“Power_Consumption”:0 | "Number_SAP": "3333333333333" | "SUPPORT_active": "1999-01-31" |
“Power_Consumption”:4 | "Number_SAP": "22222222222222" | "SUPPORT_active": "2000-01-31" |
或
列名:
功耗 | SAP 否 | 支持 |
---|---|---|
0 | 3333333333333 | 1999-01-31 |
4 | 2222222222222 | 2000-01-31 |
解析没问题,但仅限于 4 个项目,但在我的情况下最多可以有 9 个项目。
答案 0 :(得分:2)
存储的数据是有效的 JSON 内容,因此可能最合理的方法是使用 OPENJSON()
和显式架构解析数据(请注意,您至少需要 SQL Server 2016 才能使用此功能):< /p>
SELECT j.*
FROM (VALUES
('{"Supervisor":"you","Number_SAP":"33333333333","SUPPORT_level":"on,NBD2222x5; KeepYourHardDrive-MultiDrive PCYourDriveYour","SUPPORT_active":"1999-01-31","SUPPORT_required":false,"Power_Consumption":0}'),
('{"Power_Consumption":4,"Number_SAP":"22222222222222","SUPPORT_level":"OFF,ddd333222x5; MultiDrive","SUPPORT_active":"2000-01-31","Supervisor":"ME","SUPPORT_required":"True"}')
) d (Data)
OUTER APPLY OPENJSON(d.Data) WITH (
[Power Consumption] int '$.Power_Consumption',
[SAP No] varchar(20) '$.Number_SAP',
[Support] varchar(10) '$.SUPPORT_active'
) j
结果:
功耗 | SAP 否 | 支持 |
---|---|---|
0 | 33333333333 | 1999-01-31 |
4 | 22222222222222 | 2000-01-31 |
答案 1 :(得分:0)
SELECT top(10) Name,
JSON_VALUE( custom, '$.Power_Consumption') AS PostCode,
JSON_VALUE( custom, '$.Number_SAP') AS [SAP No],
JSON_VALUE( custom, '$.SUPPORT_active') AS [Support]
FROM [dbo].[Data]
it works perfectly for me
@Venkataraman R thanks for guiding me to the right solution.
也许我的解决方案对某人也有用