在SQL中减去时间戳

时间:2019-07-02 20:29:55

标签: sql netezza

我有以下两种情况

案例1

表1

Name  Start_Sub1           End_Sub1            Start_Sub2           End_Sub2 
A    2018-09-19 07:42:00  2018-09-19 09:12:00 2018-09-23 04:02:00 2018-09-23 05:09:00

我想找到学生在考试中花费的总时间,即在两个科目中花费的时间。我应该使用哪个函数来获取此信息。

情况2: 由于人为错误,数据记录如下:

Name  Start_Sub1           End_Sub1            Start_Sub2           End_Sub2 
A    2018-09-19 07:42:00  2018-09-19 09:12:00 2018-09-19 08:02:00 2018-09-19 02:09:00

在这种情况下,两个时间戳记中的时间重叠。在这种情况下可以计算出在考试中花费的总时间吗?

1 个答案:

答案 0 :(得分:0)

您可以使用EXTRACT()函数将时间戳转换为秒,并找出分段是否重叠。查询应如下所示:

select
  *,
  case 
    when extract(epoch from End_Sub1) < extract(epoch from Start_Sub2) 
    then extract(epoch from End_Sub1) - extract(epoch from Start_Sub1) +
         extract(epoch from End_Sub2) - extract(epoch from Start_Sub2)
    else extract(epoch from End_Sub2) - extract(epoch from Start_Sub1)
  end as diff
from table1

有关如何获取时差的详细信息,请参见Time difference in seconds using Nettezza