gpt4 book ai didi

sql-server - 使用sql查询将日期时间值从一个时区转换为UTC时区

转载 作者:行者123 更新时间:2023-12-02 11:48:30 24 4
gpt4 key购买 nike

我有一个日期时间值。该日期时间值可以位于任何时区,例如“东部标准时间”或“印度标准时间”。我想在 SQL 中将该日期时间值转换为 UTC 时区。这里的时区值将是给定的参数。我也可以使用 C# 代码来实现这一点。但我在 SQL 查询中需要这个。

谁能告诉我如何转换它?

最佳答案

时区和时区偏移量是两个不同的东西。如果使用夏令时,时区可以有不同的偏移量。在最新版本 2016 中,SQL Server 添加了时区支持。

您的问题有两个部分 - 如何将 datetime 值转换为带有偏移量/时区的值,然后如何将该值转换为 UTC。

在 SQL Server 2014 之前的版本中,您必须提前确定本地时区的正确偏移量,例如使用 C# 代码。获得它后,您可以将 datetime 转换为具有特定偏移量的“datetimeoffset” TODATETIMEOFFSET :

select TODATETIMEOFFSET(GETDATE(),'02:00')

select TODATETIMEOFFSET(GETDATE(),120)

这将返回一个包含原始时间和指定偏移量的datetimeoffset值。

切换到另一个偏移量(例如UTC)由SWITCHOFFSET执行功能

select SWITCHOFFSET(@someDateTimeOffset,0)

您可以将两者结合起来

select SWITCHOFFSET(TODATETIMEOFFSET(GETDATE(),120),0)

偏移量可以作为参数传递。假设您的字段名为 SomeTime,您可以编写

select SWITCHOFFSET(TODATETIMEOFFSET(SomeTime,@offsetInMinutes),0)

在 SQL Server 2016 中,您可以使用时区名称。不过,您仍然需要进行两次转换,首先转换为本地时区,然后转换为 UTC:

SELECT (getdate() at time zone 'Central Europe Standard Time') AT TIME ZONE 'UTC'

第一个 AT TIMEZONE 返回一个带有 +2:00 偏移量的 datetimeoffset,第二个将其转换为 UTC。

注意

如果您使用 datetimeoffset 类型而不是 datetime,您可能可以避免所有转换。 SQL Server 允许对不同偏移量的值进行比较、过滤、计算等,因此您不需要为查询进行任何转换。在客户端,.NET 具有等效的 DateTimeOffset 类型,因此您无需在客户端代码中进行任何转换。

关于sql-server - 使用sql查询将日期时间值从一个时区转换为UTC时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com