【问题标题】:How to get the Time Offset converted to an Int or added to the datetime column (with TSQL)如何将时间偏移量转换为 Int 或添加到日期时间列(使用 TSQL)
【发布时间】:2019-11-20 21:06:33
【问题描述】:

我有以下脚本给我:

  Select    ENDTIME_UTC AT TIME ZONE 'E. South America Standard Time' as TransactionDate_ESAST
            ,ENDTIME_UTC as TransactionDate
    From   Table_CYC
  --Results: 2019-11-09 21:02:28.000 -03:00, 2019-11-09 21:02:28.000

但是,我希望它是 -3(作为仅偏移部分的整数)或 2019-11-09 18:02:28.000,其中小时减去三。

解决此问题的最佳方法是什么? 谢谢, 尤兰达

【问题讨论】:

    标签: sql sql-server tsql timezone-offset


    【解决方案1】:

    正如当前所写,您断言现有值采用巴西利亚时间,并且不执行任何时区转换。相反,您需要断言现有值采用 UTC,然后转换为巴西利亚时间。

    这是通过调用AT TIME ZONE两次来完成的。

    SELECT ENDTIME_UTC AT TIME ZONE 'UTC' AT TIME ZONE 'E. South America Standard Time'
    
    • 第一个 AT TIME ZONE 从您的输入 datetime 创建一个 datetimeoffset,断言它应该与 UTC 时区一起应用。
    • 第二个AT TIME ZONE 然后使用给定的时区从那个datetimeoffset 转换为另一个datetimeoffset

    请注意,这只是必要的,因为您的原始字段类型为 datetime(或 datetime2 等)。如果您的字段是datetimeoffset,那么您的原始代码可以正常工作。

    【讨论】:

    • 就自己获取偏移量而言,执行上述操作后,您可以使用技术described in this answer从结果中提取偏移量。
    猜你喜欢
    • 2018-02-20
    • 2016-10-23
    • 2018-03-23
    • 2012-03-22
    • 1970-01-01
    • 2020-01-08
    • 2015-02-26
    • 2023-04-02
    • 2012-08-02
    相关资源
    最近更新 更多