32

为什么我们应该使用GETUTCDATE()函数而不是getdate()反之亦然?

两者的目的是什么?请帮我举个例子。

4

2 回答 2

63

GETUTCDATE()表示当前UTC时间(通用时间坐标或格林威治标准时间)

  • 它是一个nondeterministic函数,引用该列的视图和表达式不能被索引。

当前 UTC 时间派生自当前本地时间和运行 SQL Server 的计算机的操作系统中的时区设置。

GETDATE()和之间的区别GETUTCDATE()是 SQL Server 机器的时区编号

为了更好地理解,请参见示例:

DECLARE @local_time DATETIME;
DECLARE @gmt_time DATETIME;
SET @local_time = GETDATE();
SET @gmt_time = GETUTCDATE();
SELECT 'Server local time: '
   + CONVERT(VARCHAR(40),@local_time);
SELECT 'Server GMT time: '
   + CONVERT(VARCHAR(40),@gmt_time);
SELECT 'Server time zone: '
   + CONVERT(VARCHAR(40),
      DATEDIFF(hour,@gmt_time,@local_time));
GO

输出:

Server local time: Jun  2 2007 10:06PM
Server GMT time: Jun  2 2007  4:21PM
Server time zone: 6

获取日期 ()

  • 它将返回带有您所在地区时间的日期,或者我们可以说,它返回当前系统日期和时间。
  • 如果您远程连接到 SQL 服务器,则显示的时间戳将是远程计算机的时间戳,而不是您的本地计算机的时间戳。
  • 它是一个非确定性函数。
  • 无法索引引用此列的视图和表达式。

获取UTC日期()

  • 它将返回日期和 GMT 时间(格林威治标准时间)。
  • GETUTCDATE() 可用于存储独立于时区的时间戳。
  • 当前 UTC 时间源自当前本地时间和运行 Microsoft SQL Server 实例的计算机的操作系统中的时区设置。
  • GETUTCDATE 是一个非确定性函数。
  • 无法索引引用此列的视图和表达式。
于 2013-02-21T07:02:19.537 回答
0

getdate() 将返回本地系统上的日期。假设您正在提取一些数据,并且数据库服务器位于 UTC 位置。您的日期时间列将返回 UTC 时间戳,您将无法匹配时间戳。

因此,您可以通过在 UTC 日期和 getdate 上使用 datediff 函数来调整日期时间。

于 2018-03-15T23:05:19.497 回答