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

如何在SQL Server中对dd/mm/yyyy格式日期减一个月?排查异常

问题原因及解决办法

你的SQL语句里,问题出在CONVERT(char(9), GETDATE())这一步——把GETDATE()返回的日期时间转成9字符的字符串时,会直接截断年份的最后一位,导致后续转成DATE类型时年份被错误识别,最终DATEADD计算出来的结果连年份都错了。

比如如果当前GETDATE()返回的是2022-10-09,转成char(9)后可能变成'Oct 09 202'(取决于系统默认日期格式),转成DATE时就会被解析成公元202年10月9日;或者如果系统默认格式是dd/mm/yyyy,截断后得到'09/10/202',会被错误识别为2020年10月9日,减一个月后就得到你看到的09/10/2020。

正确写法

不需要多此一举把日期转成短字符串,直接对GETDATE()执行DATEADD操作即可:

SELECT FORMAT(DATEADD(MONTH, -1, GETDATE()), 'dd/MM/yyyy')

如果是要处理某个特定的dd/mm/yyyy格式的字符串日期(而非当前系统时间),要指定正确的格式代码(103对应dd/mm/yyyy)来转换,避免解析错误:

-- 示例:处理字符串'10/10/2022'
DECLARE @target_date VARCHAR(10) = '10/10/2022'
SELECT FORMAT(DATEADD(MONTH, -1, CONVERT(DATE, @target_date, 103)), 'dd/MM/yyyy')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:20:32