sql - 在 SQL Server 中将字符串拆分为列
问题描述
我在拆分以下字符串时遇到了一些困难:
“问候1”:“嗨”,“问候2”:“你好”,“问候3”:“嘿”
...作为单独的列进入我想要的输出:
+------------+------------+-----------+
| greeting1 | greeting2 | greeting3 |
+------------+------------+-----------+
| hi | hello | hey |
+------------+------------+-----------+
仅供参考-我使用的是 SQL Server,问候语的最大数量是五个,并且我知道可以使用的 STRING_SPLIT 函数,但我真的不知道如何使用它-还要考虑我的引号和冒号的数量细绳。任何反馈或建议都会非常有帮助!谢谢你。:)
解决方案
如果您使用的是 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
推荐阅读
- rust - 为什么 Rust 需要所有权注释而不是推断它?
- sqlite - 如何使用 Flask 从 HTML 中获取数据并将其添加到 SQLite?
- reactjs - React.js setState 没有通过 onclick 获得更新
- django - Apache - (104)Connection reset by peer: [client xxxx:4712] AH03308: ap_proxy_transfer_between_connections: error on sock - ap_get_brigade
- javascript - fs.readdirSync 并不总是返回文件夹的所有内容
- r - 在 dplyr::anti_join() 期间必须使用有效的下标向量子集元素
- bash - 从文件和管道读取时,Shell 程序的行为不同
- python - django 在每次运行时显示一个新生成的 html 文件
- r - 如何导入具有变量值、标签、角色和测量级别(测量)的 SPSS sav 文件?
- javascript - 向 javascript 添加输入