You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:24:06