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

SQL Server中GETDATE()等时间函数返回值一致性规则问询

SQL Server 时间函数返回值一致性规则说明

核心一致性边界

  • 单条语句的整个执行生命周期内,所有对GETDATE()等时间函数的调用返回值完全一致:无论是同一表达式内的多次调用、同一条DML语句中针对单行/多行的不同表达式调用,还是语句执行过程中触发的所有触发器内的调用,都会得到相同的时间值,不存在跨精度临界值返回不同结果的可能。
  • 仅当执行上下文切换到独立执行批次、用户主动调用的独立存储过程/自定义函数时,时间函数才会重新计算返回值,和外层语句的调用结果可能存在差异。

常见疑问解答

你提到的当月第一天计算表达式:
DATEADD(day, 1-DATEPART(day, GETDATE()), GETDATE())
是完全安全的,两次GETDATE()调用属于同一条表达式的执行上下文,必然返回相同值,即使恰好跨月末月初的时间边界执行也不会出现非预期结果。

跨上下文一致性规避方案

如果需要保证跨存储过程、跨批次的时间一致,可提前将时间值赋值给变量,后续逻辑、参数传递都复用该变量即可:

DECLARE @CurrDateTime DATETIME = GETDATE();
-- 后续所有逻辑都引用@CurrDateTime,调用存储过程时将其作为参数传入

上述所有规则同样适用于SYSDATETIME()、GETUTCDATE()、SYSDATETIMEOFFSET()等所有SQL Server系统时间获取函数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:54:04