如何在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
相关产品推荐
相关产品推荐

