将字符串拆分为SQLServer中的列

我在拆分以下字符串时遇到了一些困难:

"greeting1": "hi", "greeting2": "hello", "greeting3": "hey"

...作为单独的列进入我想要的输出:

+------------+------------+-----------+
| greeting1  | greeting2  | greeting3 | 
+------------+------------+-----------+
|   hi       |  hello     |   hey     |               
+------------+------------+-----------+ 

仅供参考 - 我正在使用 SQL Server,问候的最大数量是五个,我知道我可以使用一个 STRING_SPLIT 函数,但我真的不知道如何使用它 - 还考虑了我的引号和冒号的数量细绳。任何反馈或建议都会非常有帮助!谢谢你。:)

回答

如果您使用的是 SQL Server 2016+,则可以使用OPENJSON()显式架构(WITH子句)将输入文本解析为 JSON 。如果问候的最大数量为 5,则需要使用适当的列定义:

DECLARE @text varchar(1000) = '"greeting1": "hi", "greeting2": "hello", "greeting3": "hey"'

SELECT *
FROM OPENJSON(CONCAT('{', @text, '}')) WITH (
   greeting1 varchar(1000) '$.greeting1',
   greeting2 varchar(1000) '$.greeting2',
   greeting3 varchar(1000) '$.greeting3',
   greeting4 varchar(1000) '$.greeting4',
   greeting5 varchar(1000) '$.greeting5'
)

结果:

greeting1 greeting2 greeting3 greeting4 greeting5
-------------------------------------------------
hi        hello     hey

  • In before the OP says "But I need to do this dynamically."

以上是将字符串拆分为SQLServer中的列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>