代码之家  ›  专栏  ›  技术社区  ›  Himanshu Pant

计算Teradata中的时间差

  •  0
  • Himanshu Pant  · 技术社区  · 6 年前

    我想取两个日期字段的差值,但都是varchar字段

    语法编辑器代码段:

    start_time- 2018-03-02 06:31:22
    
    end_time -  2018-03-02 06:33:32.478000  
    

    我希望整数中的结果始终为2,并且始终为整数

    结果:-2

    如果有人能帮我解决这个问题,那就太好了。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   dnoeth    6 年前

    您可以利用间隔计算,如 cast((cast(end_time as timestamp) - cast(start_time as timestamp) minute(4)) as int) ,但它将失败,因为>9999分钟。

    这是SQL UDF,用于以秒为单位计算时间戳的差异,没有任何限制:

    REPLACE FUNCTION TimeStamp_Diff_Seconds
    (
       ts1 TIMESTAMP(6)
      ,ts2 TIMESTAMP(6)
    )
    RETURNS DECIMAL(18,6)
    LANGUAGE SQL
    CONTAINS SQL
    RETURNS NULL ON NULL INPUT
    DETERMINISTIC
    SQL SECURITY DEFINER
    COLLATION INVOKER
    INLINE TYPE 1
    RETURN
    (CAST((CAST(ts2 AS DATE)- CAST(ts1 AS DATE)) AS DECIMAL(18,6)) * 60*60*24)
          + ((EXTRACT(  HOUR FROM ts2) - EXTRACT(  HOUR FROM ts1)) * 60*60)
          + ((EXTRACT(MINUTE FROM ts2) - EXTRACT(MINUTE FROM ts1)) * 60)
          +  (EXTRACT(SECOND FROM ts2) - EXTRACT(SECOND FROM ts1))
    ;
    

    如果无法创建自定义项,可以复制源并应用最终 / 60 并将其转换为整数。