DateTime2 值未使用 At Time Zone SQL 函数转换为 Datetime

DateTime2 value not getting converted to Datetime using At Time Zone SQL function

我正在编写函数以使用 At Time Zone SQL 函数根据时区值将时间戳转换为本地时间戳。

源时间戳列具有 datetime2 数据类型和 value=2020-10-29 23:59:59.997000.

当我尝试使用

将其转换为日期时间时
CAST(CAST(Timestamp AS DatetimeOffset) AT TIME ZONE 'Pacific Standard Time' AS DATETIME)

我得到 value=2020-10-29 23:59:59.996667 这是不正确的。

要添加什么,所以值在日期时间。

我相信我可能已经发现了您的问题。当您将 DATETIME2 转换为 DATETIME,然后返回 DATETIME2(6) 时,您会得到结果:

查询以证明您的问题

SELECT CAST(CAST('2020-10-29 23:59:59.997' AS DATETIME) AS DATETIME2(6))

--Returns 2020-10-29 23:59:59.996667

很难确定您需要什么,但看起来您正在尝试获取与原始数据相同的数据类型 DATETIME2(6) 中的本地时间。 AT TIME ZONE returns DATETIMEOFFSET,所以只需要在之后转换回DATETIME(假设你的原始数据是UTC时间)。请参阅下面的查询

Return 没有偏移信息的当地时间

DECLARE @d2 DATETIME2(6) = '2020-10-29 23:59:59.997000'

SELECT CAST(@d2 AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS DATETIME)