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

SQL Server 2019无DATETRUNC时截断datetime(7)的替代方案

替代DATETRUNC的SQL Server 2019日期截断方案

在SQL Server 2019里,要实现不同精度的datetime(7)数据截断(年、月、日、小时、分钟、秒),用DATEADD+DATEDIFF的组合是最简洁的方案,直接返回日期类型,比拼接DATEPART生成字符串的方式更高效、更符合需求。针对各精度的具体写法如下:

  • 截断到年

    SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, YourDateTimeColumn), 0) AS TruncatedToYear
    FROM YourTable;
    

    原理:计算基准日期('1900-01-01',用0表示)到目标日期的年数,再将该年数加回基准日期,得到当年1月1日00:00:00的日期值。

  • 截断到月

    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, YourDateTimeColumn), 0) AS TruncatedToMonth
    FROM YourTable;
    

    得到目标日期所在月份的1日00:00:00。

  • 截断到日

    SELECT DATEADD(DAY, DATEDIFF(DAY, 0, YourDateTimeColumn), 0) AS TruncatedToDay
    FROM YourTable;
    

    得到目标日期当天的00:00:00。

  • 截断到小时

    SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, YourDateTimeColumn), 0) AS TruncatedToHour
    FROM YourTable;
    

    截断掉分钟、秒及毫秒部分,保留到小时。

  • 截断到分钟

    SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, YourDateTimeColumn), 0) AS TruncatedToMinute
    FROM YourTable;
    

    截断掉秒及毫秒部分,保留到分钟。

  • 截断到秒

    SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, YourDateTimeColumn), 0) AS TruncatedToSecond
    FROM YourTable;
    

    截断掉毫秒部分,保留到秒级的datetime值。

这个方案的核心逻辑是通过DATEDIFF计算目标日期与基准日期之间的指定精度间隔数,再用DATEADD将该间隔数加回基准日期,从而实现截断效果。返回的结果是原生的datetime类型,无需额外类型转换,性能也比字符串拼接方式更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:17:39