在选择列表中选择两次GETDATE()函数 - 两者的值相同?

lar*_*ryq 15 sql-server-2005 getdate

我有一个SELECT语句,它使用GETDATE()两个不同的列值.我想知道,根据事物的性质,同一个SELECT中的两个单独的函数调用每次都会返回相同的值吗?

Mar*_*ith 11

不,他们不能保证每次都返回相同的值.每个单独的引用GetDate()都是一个运行时常量,并将在整个查询中保持其值...

SELECT GETDATE()
FROM large_table
Run Code Online (Sandbox Code Playgroud)

无论查询运行多长时间,都将在所有行中返回相同的值.

但不能保证不同的引用具有相同的值.

你可以看到如下

SET NOCOUNT ON;

DECLARE @T TABLE 
(
rownum INT IDENTITY(1,1) PRIMARY KEY,
d1 DATETIME,
d2 DATETIME
)

WHILE (5 > (SELECT COUNT(*) FROM @T WHERE d1 <> d2))
    BEGIN
    DELETE FROM @T WHERE d1 = d2
    INSERT INTO @T 
    SELECT GETDATE(),GETDATE()
    END

SELECT * FROM @T
Run Code Online (Sandbox Code Playgroud)

示例结果

rownum      d1                      d2
----------- ----------------------- -----------------------
22381       2011-05-18 12:24:14.433 2011-05-18 12:24:14.437
30912       2011-05-18 12:24:15.420 2011-05-18 12:24:15.423
43234       2011-05-18 12:24:16.717 2011-05-18 12:24:16.720
113360      2011-05-18 12:24:24.210 2011-05-18 12:24:24.213
147855      2011-05-18 12:24:27.817 2011-05-18 12:24:27.820
Run Code Online (Sandbox Code Playgroud)


Str*_*ior 6

很抱歉这么说,但我刚刚想出一个测试,表明它不会总是返回相同的值.它实际上会被评估两次,如果系统时钟恰好在这两次评估之间的时间内翻转,那么两次调用之间的时间可能略有不同.

但是,其他人说是不会每行评估一次:每列只评估一次.

如果在同一语句中使用两次,请参阅GETUTCDATE()将返回相同的值吗?


Dus*_*ine -2

是的,他们将返回相同的日期和时间,精确到毫秒。

SELECT GETDATE(), GETDATE()
Run Code Online (Sandbox Code Playgroud)

退货

2010-10-29 15:34:06.353 2010-10-29 15:34:06.353
Run Code Online (Sandbox Code Playgroud)

我用 4000 测试过,GETDATE()它们都返回相同的结果。