如何用SQL Server JSON函数将整数列查询结果转为整数数组
实现SQL Server查询结果转为整数数组字符串
好问题!你已经掌握了用OPENJSON把字符串数组转成查询结果的方法,现在要反向操作,其实SQL Server里有几种更优雅的实现方式,除了你正在用的STUFF拼接,也可以结合JSON函数或更简洁的字符串聚合函数来完成,下面给你详细拆解:
方法1:用STRING_AGG(SQL Server 2017及以上版本)
这是最直观简洁的方案,直接聚合数值并拼接成数组格式:
SELECT CONCAT('[', STRING_AGG(Number, ','), ']') AS IntegerArray FROM Table_name;
STRING_AGG会自动把所有Number值用逗号分隔拼接,再通过CONCAT加上前后的方括号,完美得到你需要的[1,2,45,...]格式。
方法2:结合FOR JSON和JSON_QUERY优化输出
你之前尝试FOR JSON没得到预期结果,其实是可以调整输出结构的。通过WITHOUT_ARRAY_WRAPPER参数去掉默认的外层数组,再手动拼接方括号就能得到纯整数数组:
SELECT CONCAT('[', JSON_QUERY((SELECT Number AS [*] FROM Table_name FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)), ']') AS IntegerArray;
解释一下:
- 把列名指定为
[*]后,FOR JSON PATH会直接输出数值而非带键的JSON对象; WITHOUT_ARRAY_WRAPPER会去掉默认的外层数组包裹,输出1,2,45,...形式的字符串;- 最后用
CONCAT补上前后方括号,得到标准的整数数组格式。
方法3:传统的STUFF+FOR XML PATH(兼容旧版本)
这就是你目前在用的方案,这里整理标准写法方便对比:
SELECT CONCAT('[', STUFF((SELECT ',' + CAST(Number AS VARCHAR(MAX)) FROM Table_name FOR XML PATH('')), 1, 1, ''), ']') AS IntegerArray;
这个方案兼容SQL Server 2005及以上版本,通过FOR XML PATH('')把所有数值拼接成,1,2,45,...,再用STUFF去掉开头的逗号,最后添加方括号完成格式转换。
对比总结
- 若你的SQL Server版本是2017+,优先用
STRING_AGG,代码最简洁易读; - 若习惯使用JSON函数的特性,选择
FOR JSON结合JSON_QUERY的方式; - 旧版本数据库则用
STUFF+FOR XML PATH的传统方案。
内容的提问来源于stack exchange,提问作者Prabesh
相关产品推荐
相关产品推荐

