【问题标题】:Time Difference in Redshift红移时差
【发布时间】:2014-11-16 08:40:13
【问题描述】:

如何获得两列之间的准确时间差

例如:

   col1 date is 2014-09-21 02:00:00
   col2 date is 2014-09-22 01:00:00

输出喜欢

result: 23:00:00

我得到的结果像

 Hours Minutes Seconds
 --------------------
  3    3       20
  1    2       30

使用以下查询

SELECT start_time,
       end_time,
       DATE_PART(H,end_time) - DATE_PART(H,start_time) AS Hours,
       DATE_PART(M,end_time) - DATE_PART(M,start_time) AS Minutes,
       DATE_PART(S,end_time) - DATE_PART(S,start_time) AS Seconds
FROM user_session

但我需要喜欢

 Difference 
 -----------
  03:03:20
  01:02:30

【问题讨论】:

  • 也许您可以使用DATEDIFF 进行一些手动操作(例如:DATEDIFF(hours, date1, date2))...
  • 它只会检索小时,但我需要 HH:MI:SS
  • 这只是几个小时的一个例子。我建议你对其他日期部分使用类似的函数并对其进行一些操作。
  • 我尝试了一些功能,但没有一个有效。如果你知道什么就发帖告诉我
  • 有人回答这个问题吗?

标签: sql amazon-redshift date-arithmetic


【解决方案1】:

使用 DATEDIFF 获取两个日期时间之间的秒数:

DATEDIFF(second,'2014-09-23 00:00:00.000','2014-09-23 01:23:45.000')

然后使用 DATEADD 将秒数添加到“1900-01-01 00:00:00”:

DATEADD(seconds,5025,'1900-01-01 00:00:00')

然后将结果转换为 TIME 数据类型(请注意,这会将您限制为 24 小时 ma​​x):

CAST('1900-01-01 01:23:45' as TIME)

然后 LTRIM 将 TIME 数据中的值的日期部分(由 Benny 发现)。 Redshift 不允许在 实际 存储的数据上使用 TIME:

LTRIM('1900-01-01 01:23:45','1900-01-01')

现在,一步完成:

SELECT LTRIM(DATEADD(seconds,DATEDIFF(second,'2014-09-23 00:00:00','2014-09-23 01:23:45.000'),'1900-01-01 00:00:00'),'1900-01-01');

:)

【讨论】:

  • 我使用 ltrim() 而不是 cast()。
  • 这太棒了。
【解决方案2】:
SELECT LTRIM(DATEADD(seconds,DATEDIFF(second,'2014-09-23 00:00:00','2014-09-23 01:23:45.000'),'1900-01-01 00:00:00'),'1900-01-01');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多