【问题标题】:Convert timestamp to local time T-SQL将时间戳转换为本地时间 T-SQL
【发布时间】:2020-06-13 15:28:57
【问题描述】:

我正在 t-sql 中编写一个查询来将时间戳转换为本地时间, 并且不知道如何根据以下列正确执行此操作: 时间:'29/02/2020 12:02:05' 和 时区:'欧洲/巴黎'

示例结果 function('29/02/2020 12:02:05','Paris') 应该返回 '29/02/2020 13:02:05' 对应的内部时间戳表示。

谢谢

【问题讨论】:

  • 什么版本的 SQL Server?您是否有一个映射表,其中包含您所有时区的 UTC +/- 值?如果没有,您将需要创建一个。为什么选择单独存储时区而不使用datetimeoffset
  • 另外,为什么29/02/2020 12:02:05 会返回2007-11-11 00:59:00?这些日期完全不同。
  • 所以我只是用来获取数据的db,只需要根据UTC+0,sql 2016进行转换

标签: sql sql-server tsql date select


【解决方案1】:

如果您运行的是 SQL Server 2016 或更高版本,则可以使用at time zone

要将 utc 日期时间转换为给定时区,您可以:

select t.ts at time zone 'utc' at time zone t.tz from t

其中ts 是包含datetime 的列,tz 是有效的目标时区(您可以在sys.time_zone_info 中找到支持的时区列表)。

Demo on DB Fiddle

with t as (
    select 
        cast('2020-02-29 12:02:05' as datetime) ts,
        'Central European Standard Time' tz
)
select ts, tz, ts at time zone 'utc' at time zone tz ts_in_paris from t
GO
ts |茨 | ts_in_paris :------------------------ | :----------------------------- | :---------------------------- 2020-02-29 12:02:05.000 |中欧标准时间 | 2020-02-29 13:02:05.0000000

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2016-01-14
    • 2018-01-02
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2019-01-05
    • 2013-03-23
    相关资源
    最近更新 更多