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

如何将SQL Server表按日期分组转换为指定格式的JSON?

正确实现SQL Server按日期分组生成指定格式JSON的方法

方法一:使用STRING_AGG(SQL Server 2017及以上版本)

这种方法通过字符串聚合构造JSON数组,再用JSON_QUERY确保结果被识别为JSON类型,避免不必要的转义:

DROP TABLE IF EXISTS #tmp
CREATE TABLE #tmp(AnalyticGoodsT CHAR(6), date SMALLDATETIME)

INSERT INTO #tmp(AnalyticGoodsT, date)
VALUES ('000001', '20230424'), ('000002', '20230424'), ('000003', '20230424'), ('000004', '20230424')

-- 生成目标JSON
SELECT
    CONVERT(VARCHAR, date, 104) AS Date,
    JSON_QUERY('["' + STRING_AGG(QUOTENAME(AnalyticGoodsT, '"'), '","') + '"]') AS bk
FROM #tmp
GROUP BY date
FOR JSON PATH

方法二:使用子查询+FOR JSON PATH(兼容更早版本)

通过子查询生成纯值数组,再用JSON_QUERY处理JSON类型,保证输出格式正确:

SELECT
    CONVERT(VARCHAR, date, 104) AS Date,
    JSON_QUERY((
        SELECT AnalyticGoodsT AS [value]
        FROM #tmp a2
        WHERE a2.date = a1.date
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    )) AS bk
FROM #tmp a1
GROUP BY date
FOR JSON PATH

原方法的问题

你之前的实现通过REPLACE修改JSON字符串,这种方式存在明显缺陷:

  • 如果AnalyticGoodsT的值包含{"id":或"}这类字符串,会直接破坏JSON格式
  • 依赖子查询生成的JSON结构细节,一旦SQL Server的JSON生成逻辑变更,代码会失效
  • 无法保证输出JSON的合法性,容易出现语法错误

内容的提问来源于stack exchange,提问作者Вовжан

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:45:11