【问题标题】:Converting Unix time to DateTime 103将 Unix 时间转换为 DateTime 103
【发布时间】:2019-02-13 12:53:58
【问题描述】:

我有一个连接两个酒店预订数据表的存储过程,但是,我从中提取数据的 API 使用 Unix 时间。我需要将其转换为 DateTime 以匹配我的公司字段。

目前,我的转换如下所示。

IIF([start] IS NOT NULL, 
    CONVERT(varchar(10), [start], 103),'')  as 'ArrivalDate'

这只是返回值1547310796,因此没有进行任何转换。

如何转换值以匹配 103 日期时间?

【问题讨论】:

  • 。 . .那是因为您的基值不是所需的格式(即date)。
  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,并不是特定数据库产品的名称(SQL 标准中也没有IIF)。请为您正在使用的数据库产品添加tag

标签: sql sql-server date datetime unix-timestamp


【解决方案1】:

如果您只想要日期而不是时间,我只是想回到这个并添加另一个有效的答案。

    SELECT cast(DATEADD(S,[start], '1970-01-01') as date) as 'ArrivalDate'

【讨论】:

    【解决方案2】:

    应该这样做:

    SELECT DATEADD(second, 1547310796 - DATEDIFF(second, GETDATE(), GETUTCDATE()), '1970-01-01')
    

    DATEDIFF(second, GETDATE(), GETUTCDATE()) 部分将告诉您距离 UTC 时间落后多远。您需要从 UTC 时间戳中减去那么多秒才能得到当地时间。

    【讨论】:

      【解决方案3】:

      适用于 Oracle/Sql

      select TO_date ('19700101000000','YYYYMMDDHH24MISS') + NUMTODSINTERVAL(<YOUR_COLUMN>+ decode (sessiontimezone, '+01:00', 3600, '+02:00', 7200, 0) , 'SECOND') as ArrivalDate
      

      【讨论】:

      • 这是甲骨文(?)。该问题被标记为“sql-server”
      • @HansKesting 不,不是甲骨文。
      • "'to_date' 不是可识别的内置函数名称。"
      猜你喜欢
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多