【问题标题】:Error in MS SQl 11.0 given code: 'unix_timestamp' is not a recognized built-in function name给定代码的 MS SQl 11.0 中的错误:“unix_timestamp”不是可识别的内置函数名称
【发布时间】:2019-09-10 10:00:04
【问题描述】:

我从另一个开发人员那里得到了 SQL 查询,并且有 unix_timestamp 函数,因为该查询在确切的时间段内返回数据库中的对象列表。由于 SQL 错误 195,查询不起作用:“unix_timestamp”不是可识别的内置函数。

n.created>unix_timestamp('2019-02-28') and n.created<unix_timestamp('2019-09-01')

【问题讨论】:

    标签: sql sql-server database unix-timestamp


    【解决方案1】:

    "unix_timestamp" 是 MySQL 上的内置函数 - 它不是在 SQLserver 上。

    这是获取 unix 时间戳的代码现在

    SELECT DATEDIFF(SECOND,'1970-01-01', GETUTCDATE()) AS unix_timestamp
    

    您可以创建一个用户定义的函数来执行此操作并按原样使用查询,或者您可以像这样修改查询:

    n.created>(DATEDIFF(SECOND,'1970-01-01', '2019-02-28')) and n.created<(DATEDIFF(SECOND,'1970-01-01','2019-09-01'))
    

    【讨论】:

    • 那么,有没有办法在SQL-server上激活这段代码?
    • @lisa 道歉 - 我提交得太快了,我已经添加了一些代码,应该可以让你实现你想要的。
    • 这里的 1970 年意味着什么?
    • @lisa unix 时间戳以自 1970 年 1 月 1 日以来的秒数为单位测量 - 因此通过将该日期传递给 SQL 的 DATEDIFF 函数并要求它给我们从那时到两个日期之间的秒数我们得到的原始查询(基本上 - 闰秒周围有一些东西,但希望在这里不应该成为问题)相同的结果
    【解决方案2】:

    Unix 时间戳在 SQL Server 中并不是特别有用。您可以添加一个计算列以将其转换为 datetime 数据类型:

    alter table t add created_dt as (dateadd(second, created, '1970-01-01')) persisted;
    
    create index t_created_dt on t(created_dt);
    

    这允许你写:

    n.created_dt > '2019-02-28' and
    n.created_dt < '2019-09-01';
    

    否则,motobatsu的解决方案是一个很好的解决方案。

    【讨论】:

      猜你喜欢
      • 2020-12-06
      • 2017-02-08
      • 2021-06-06
      • 2014-06-12
      • 2014-01-25
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多