MSSQL 2014 更改在不同时区返回日期
Posted
技术标签:
【中文标题】MSSQL 2014 更改在不同时区返回日期【英文标题】:MSSQL 2014 Change returned Date in a different time zone 【发布时间】: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 like hh
- 输入hour
并没有太多工作量。还有FORMAT
is incredibly inefficient;考虑one of the style numbers for convert instead(例如样式 100 很接近)。
我不能在 2016 年之前的 SQL 中使用 At TIME ZONE,该功能已添加到我正在使用的 SQL Server 2016 中 14
啊,是的,对不起,我错过了。如果您坚持使用旧版本的 SQL Server,您可能不得不使用更多的肘部油脂。例如看这个系列:part 1 | part 2 | part 3
【参考方案1】:
首先,我要指出的是,SQL Server 2014 已于 2019 年 7 月 9 日结束主流支持。您真的不应该再在生产环境中使用它了。
如果您必须继续使用它,那么您可以考虑使用我的SQL Server Time Zone Support 项目。我很久以前写的,不再维护它,所以喜欢你的服务器 - 使用风险自负。
【讨论】:
以上是关于MSSQL 2014 更改在不同时区返回日期的主要内容,如果未能解决你的问题,请参考以下文章