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

SQL Server按年各月统计数据,如何保留日期时间格式而非字符串?

解决方法:保留datetime格式的按月统计

嘿,我来帮你调整这个查询,让DATE_FORMATION字段保持datetime格式的同时,完成按月统计的需求~

问题根源

你原来的查询里把日期转成了varchar(7)类型,导致最终结果的日期变成了字符串。我们需要换一种方式来按月分组,同时保留日期的原生datetime类型。

调整后的查询(简化高效版)

其实你的两层分组可以合并成一层,既减少冗余又提升效率:

SELECT 
    DATEADD(month, DATEDIFF(month, 0, CAST([DATE_FORMATION] AS DATE)), 0) AS [DATE_FORMATION],
    COUNT([CO_ID]) AS CO,
    SUM(CONVERT(INT, [TOTAL_MEMBERS])) AS Total_Members
FROM COCores
WHERE CAST([DATE_FORMATION] AS DATE) >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m, -10, CURRENT_TIMESTAMP)), 0)
GROUP BY DATEADD(month, DATEDIFF(month, 0, CAST([DATE_FORMATION] AS DATE)), 0)

关键细节说明

  • 日期截断逻辑:DATEADD(month, DATEDIFF(month, 0, CAST([DATE_FORMATION] AS DATE)), 0)这个表达式会把任意日期转换成该月的第一天,结果是标准的datetime类型(比如2023-01-01 00:00:00.000),完全满足你后续做日期排序、时间差计算等操作的需求。
  • 简化分组逻辑:原来的子查询是多余的,直接在SELECT和GROUP BY里使用同一个日期截断表达式,就能直接完成按月统计。
  • 可选:按月末日期统计:如果你需要显示每个月的最后一天,只需要把表达式换成EOMONTH(CAST([DATE_FORMATION] AS DATE))即可,它同样返回datetime类型的当月最后一天。

效果验证

执行这个查询后,DATE_FORMATION会保持datetime格式,同时CO和Total_Members是对应月份的汇总数据,完全符合你的要求。

内容的提问来源于stack exchange,提问作者Sadia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:40:41