【问题标题】:Time Difference in Seconds using Netezza?使用 Netezza 以秒为单位的时差?
【发布时间】:2014-07-25 15:57:53
【问题描述】:

我想以秒为单位在 Netezza 中以分钟为单位获取时差。

我有 2 列:Start(2014-06-01 07:45:04)finish(2014-06-01 07:46:58) 事件

我尝试使用 DATEDIFF(SECOND,start,finish),但 Netezza 出现错误。

有没有我缺少的功能?

Select R.*,S.*,CM.URL,DATEDIFF(SECOND,R.EVENT_DTM,S.MIN) From CTE_1 R 
JOIN CTE_2 S
on S.VISIT_KEY = R.VISIT_KEY
JOIN ADMIN.VW_DIM_CME_METADATA CM on CM.CONTENT_METADATA_KEY = R.CONTENT_METADATA_KEY

【问题讨论】:

  • 显示更多代码.. 你把这些 DATEDIFF 东西放在哪里?

标签: sql netezza


【解决方案1】:

我建议使用Netezza SQL Extension Toolkit:

select seconds_between('1996-02-27 06:12:33','1996-02-27 06:55:22');

Date and Time function reference

【讨论】:

    【解决方案2】:

    如果您想要两个时间戳之间的秒数签名结果,我建议使用如下表达式。

    TESTDB.ADMIN(ADMIN)=> select * from time_diff;
            COL1         |        COL2
    ---------------------+---------------------
     2014-06-24 21:28:33 | 2014-06-22 21:30:58
    (1 row)
    
    TESTDB.ADMIN(ADMIN)=> select extract(epoch from col1) - extract(epoch from col2) diff from time_diff;
      DIFF
    --------
     172655
    (1 row)
    
    TESTDB.ADMIN(ADMIN)=> select extract(epoch from col2) - extract(epoch from col1) diff from time_diff;
      DIFF
    ---------
     -172655
    (1 row)
    

    如果您对签名结果不感兴趣,那么使用 mc110 提到的 SQL 扩展工具包提供的 seconds_between 函数效果很好,或者您可以简单地将 ABS 函数应用于第一个解决方案。

    如果您在当前数据库中安装了 SQL 扩展工具包,则不需要我在这里使用的 SQLEXT.. 限定符。我碰巧将工具包安装在一个名为 SQLEXT 的单独数据库中。

    TESTDB.ADMIN(ADMIN)=> select abs(extract(epoch from col2) - extract(epoch from col1)) diff from time_diff;
      DIFF
    --------
     172655
    (1 row)
    
    TESTDB.ADMIN(ADMIN)=> TESTDB.sqlext..seconds_between(col1,col2) diff from time_diff;
      DIFF
    --------
     172655
    (1 row)
    

    我建议不要使用带有“秒”的提取,因为您得到的结果可能不是您想要的。同样,在两个值的减法周围使用带有“epoch”的单个提取也可能无法达到您的预期。

    TESTDB.ADMIN(ADMIN)=> select extract(seconds from col1 - col2) diff from time_diff;
     DIFF
    ------
       35
    (1 row)
    
    TESTDB.ADMIN(ADMIN)=> select extract(epoch from col1 - col2) diff from time_diff;
      DIFF
    --------
     172655
    (1 row)
    
    TESTDB.ADMIN(ADMIN)=> select extract(epoch from col2 - col1) diff from time_diff;
      DIFF
    ---------
     -172654
    (1 row)
    

    【讨论】:

      【解决方案3】:

      https://www-304.ibm.com/connections/forums/html/topic?id=1f1f9bec-9ed4-42f4-9242-c099a8120523 建议

      提取(从(时间戳2 - 时间戳1))

      其中一个 cmets 表示另一种选择:

      如果您安装了 Netezza SQL 扩展工具包,您可以简单地使用 seconds_between 函数,例如seconds_between(timestamp2, 时间戳1)。

      【讨论】:

        【解决方案4】:

        Alankar 的替代方案:

        Select 
            R.*,S.*,CM.URL,
            EXTRACT(SECOND from S.MIN - R.EVENT_DTM)DIFF 
            From CTE_1 R 
            JOIN CTE_2 S
            on S.VISIT_KEY = R.VISIT_KEY
            JOIN ADMIN.VW_DIM_CME_METADATA CM on CM.CONTENT_METADATA_KEY = R.CONTENT_METADATA_KEY
        

        【讨论】:

          【解决方案5】:

          在 IBM 论坛上进行了一些搜索,发现这个可行。如果有人提供更好的方法,请发布。谢谢

              Select 
              R.*,S.*,CM.URL,
              EXTRACT(EPOCH from S.MIN - R.EVENT_DTM)DIFF 
              From CTE_1 R 
              JOIN CTE_2 S
              on S.VISIT_KEY = R.VISIT_KEY
              JOIN ADMIN.VW_DIM_CME_METADATA CM on CM.CONTENT_METADATA_KEY = R.CONTENT_METADATA_KEY
          

          【讨论】:

            猜你喜欢
            • 2021-10-05
            • 2014-06-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多