【发布时间】:2021-04-20 18:35:27
【问题描述】:
我有一个查询,它返回一个日期作为列之一,但是我需要该日期位于与当前不同的时区。
SELECT ISNULL(Value, 'NULL') AS VALUE, ISNULL(UPPER(FORMAT(start_date), 'MMM dd, yyyy hh:mm ')), 'NULL') as Start_Date FROM MY TABLE
我尝试将时间设置为 1 小时以使时间与中部时间一致(目前为美国东部标准时间)
DATEADD(hh, -1, start_date)
当日期在夏令时内并且该时间段内的所有返回日期都被 1 小时后,问题就出现了 有没有办法转换 start_date 列以适应它?
【问题讨论】:
-
您写的内容不会更改时区,它会创建一个没有任何时区信息的本地化字符串。 SQL Server 已经具有时区处理功能,例如SWITCHDATEIMEOFFSET。如果你真的关心时区,最好使用
datetimeoffset类型。 -
在所有 SQL Server 版本中仍处于主流支持(2016 年及以上)同时使用
datetime和datetimeoffset您可以使用 AT TIME ZONE 使用时区名称而不是任意的 @987654337 来更改时区@或模棱两可的EST。时区缩写没有标准 -
您也可以考虑
AT TIME ZONE,但请,请,请stop using shorthand likehh- 输入hour并没有太多工作量。还有FORMATis incredibly inefficient;考虑one of the style numbers for convert instead(例如样式 100 很接近)。 -
我不能在 2016 年之前的 SQL 中使用 At TIME ZONE,该功能已添加到我正在使用的 SQL Server 2016 中 14
标签: tsql datetime sql-server-2014