【问题标题】:Converting a MSSQL Datestamp to BIGINT for UNIX将 SQL 时间戳转换为 UNIX 的 BIGINT
【发布时间】:2018-03-03 14:19:46
【问题描述】:

我遇到了一些我无法完全理解的问题,我想知道您是否可以提供帮助?

在我的桌子上,我有一个名为

的列

添加日期

此列显示事件或工单添加到数据库表的日期,其格式如下例所示:

2015-08-25 09:58:14.967

我想将其转换为 UNIX 时间戳,所以首先我执行了以下操作:

SELECT DATEDIFF(SECOND,{d '1970-01-01'}, ADDEDDATE) AS 'UNIX DATE ADDED' FROM dbo.TABLE

运行这个我得到整数值,例如“1147855575”。现在我明白了,为了在 UNIX 时间戳上进行这项工作,我需要使用 BIGINT 进行转换,所以我写了以下内容:

SELECT DATEDIFF(SECOND,{d '1970-01-01'}, ADDEDDATE) AS 'UNIX DATE ADDED',
CASE CAST(SUM('UNIX DATE ADDED' AS BIGINT) FROM dbo.TABLE

这返回了一个错误:

消息 195,级别 15,状态 10,第 2 行 “SUM”不是可识别的内置函数名称。

所以我在 Stackoverflow 中进行了一些谷歌搜索和搜索,发现我做错了第二行,它应该看起来像:

SELECT DATEDIFF(SECOND,{d '1970-01-01'}, ADDEDDATE) AS 'UNIX DATE ADDED',
CASE CAST(BIGINT,'UNIX DATE ADDED') FROM dbo.TABLE

但是,这也失败了,并显示以下消息:

消息 1035,级别 15,状态 10,第 2 行 “CAST”附近的语法不正确,应为“AS”。

有人可以帮助我尝试将整列整数数据转换为 BIGINT for UNIX Datestamp 吗?我正在使用 MSSQL (SSMS 2014)。

【问题讨论】:

  • 只需datediff(second, '1970-01-01', ADDEDDATE)
  • 箱子,错误地放在演员面前。可能你想要的是 SELECT cast(DATEDIFF(SECOND,{d '1970-01-01'}, ADDEDDATE) as bigint) AS 'UNIX DATE ADDED' FROM dbo.TABLE
  • Ahmed Saeed,不幸的是,您的解决方案返回的结果与原始 SELECT DATEDIFF(SECOND,{d '1970-01-01'}, ADDEDDATE) AS 'UNIX DATE ADDED' 完全相同。松鼠你能详细解释一下吗?

标签: sql-server unix timestamp bigint


【解决方案1】:

只是:

SELECT CAST(DATEDIFF(SECOND, '1970-01-01', ADDEDDATE) AS bigint) AS 'UNIX DATE ADDED' FROM dbo.TABLE;

当您在 SQL Server 2016 上进行迁移时,您将能够使用 DATEDIFF_BIG

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-10-07
    • 2020-10-19
    相关资源
    最近更新 更多