如何将偏移值添加/减去日期时间并在 SQL 中返回新的日期时间值?

Posted

技术标签:

【中文标题】如何将偏移值添加/减去日期时间并在 SQL 中返回新的日期时间值?【英文标题】:How can I add/subtract the offset value into datetime and return new datetime value in SQL? 【发布时间】:2021-12-28 07:36:03 【问题描述】:

我是 SQL 新手,我想在 DateTime 中添加/减去偏移值并返回新日期。

目前,我正在使用这个

SELECT 
    GETUTCDATE() AS UTCDate, 
    GETUTCDATE() AT TIME ZONE 'Eastern Standard Time'

返回这些值:

当前结果2021-12-28 07:19:39.320 -05:00

预期结果2021-12-28 02:19:39.320

我怎样才能做到这一点?任何帮助,将不胜感激。谢谢

【问题讨论】:

cast(GETUTCDATE() at time zone 'utc' AT TIME ZONE 'Eastern Standard Time' as datetime) @lptr 干净整洁的解决方案。谢谢 【参考方案1】:

您可以使用 DATEADD 和 DATEDIFF 函数:

SELECT GETUTCDATE() AS UTCDate, GETUTCDATE() AT TIME ZONE 'Eastern 
Standard Time' ,
 DATEADD(MINUTE, DATEDIFF(MINUTE ,GETUTCDATE(), GETUTCDATE() AT TIME ZONE 
'Eastern Standard Time')*-1, GETUTCDATE())

【讨论】:

【参考方案2】:

GETUTCDATE() 返回datetime 类型。您可以改用SYSDATETIMEOFFSET() 来获取datetimeoffset 并将其转换为所需的时区。

SELECT 
    SYSDATETIMEOFFSET() AS UTCDate_with_timezone, 
    SYSDATETIMEOFFSET() AT TIME ZONE 'Eastern Standard Time';

AT TIME ZONE 运算符应用于datetime 值时,它不会更改值,您只需告知系统时区是什么。并且这个时区将被附加到值中。

【讨论】:

以上是关于如何将偏移值添加/减去日期时间并在 SQL 中返回新的日期时间值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将工作日中的整数列添加/减去日期时间列?

SQL Date 函数

如何减去而不是添加像 sql 函数一样的 Sum() [关闭]

从Finish TIME值中减去Start TIME值,并在Unix文件中将值作为新列添加到CSV文件中

如何从普通日期中减去天数?

在 SQL 中创建 Excel 日期时间序列/小数部分值