首页 > 解决方案 > 在 SQL Server 中将字符串拆分为列

问题描述

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

“问候1”:“嗨”,“问候2”:“你好”,“问候3”:“嘿”

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

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

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

标签: sqlsql-serverstringsplit

解决方案


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

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

推荐阅读