SQL 将字符串拆分为列

时间:2021-07-29 07:15:46

标签: sql sql-server tsql split

我有这个问题,表中有一个字符串列,里面的数据是混合但不变的。

例如

{ "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 个项目。

2 个答案:

答案 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.

也许我的解决方案对某人也有用

相关问题