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

SQL SSMS中GETDATE()-x的最大x值及DATEADD回溯范围问询

SQL中GETDATE()-x与DATEADD(year,-x,GETDATE())的时间范围及失败阈值

1. GETDATE()-x的回溯上限与失败条件

在SQL Server中,GETDATE()返回datetime类型值,该类型合法时间范围是1753-01-01 00:00:00到9999-12-31 23:59:59.997。

执行GETDATE()-x时,x默认按天数计算(datetime类型与整数相减逻辑为减去对应天数),因此它能回溯的最远时间就是datetime类型的最小值1753-01-01,对应的x等于当前日期到1753-01-01的总天数差。

一旦x超过这个天数差,计算出的时间会小于1753-01-01,查询会直接抛出“日期时间值超出范围”类错误。

2. DATEADD(year,-x,GETDATE())的范围对比

DATEADD(year,-x,GETDATE())直接按年份做减法运算,它的回溯范围同样受限于GETDATE()返回值的数据类型:

  • 若为datetime类型,它能回溯的最远时间同样是1753-01-01,和GETDATE()-x的下限一致。当x大到让计算结果早于1753-01-01时,同样触发报错。
  • 若使用datetime2类型(范围0001-01-01到9999-12-31),两种方式的回溯上限会更早,x可取值也更大,但默认GETDATE()返回的是datetime类型。

3. 触发失败的x阈值

  • 对于GETDATE()-x:x的最大值为DATEDIFF(day, '1753-01-01', GETDATE()),超过这个值就会报错。以2024年为例,这个值约为99000(精确值需按实际日期计算总天数)。
  • 对于DATEADD(year,-x,GETDATE()):x的最大值为DATEDIFF(year, '1753-01-01', GETDATE())。比如当前是2024年,x最大为271(2024-1753),若取272,计算结果会早于1753年,触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:38:15