使用PostgreSQL减去两个日期

时间:2014-10-18 18:07:12

标签: sql postgresql date

我试图从彼此中减去2个日期,但似乎它没有正确减去,我不确定我在这里做错了什么。如果日期之间的差异小于90天,我使用case语句标记为1,否则将其标记为0.但即使日期之间的差异大于90天,它也始终标记为1。我是PostgreSQL,这是我的案例陈述:

CASE WHEN EXTRACT(DAY FROM CAST(SVS_DT AS DATE) - CAST(DSCH_TS AS DATE)) <90 
      THEN 1 ELSE 0 END AS FU90

日期的例子如下:

SVS_DT                         DSCH_TS
2013-03-22 00:00:00            2010-05-06 00:00:00

假设在这种情况下标记为0,但它标记为1,因为这两个日期之间的差异大于90天。

4 个答案:

答案 0 :(得分:3)

一天的

extract会返回日期的day元素。由于天数始终在1到31之间,因此最大差异为30,且不能大于90。

减去date以整数形式返回天数的差异。因此,您只需要放弃extract来电:

CASE WHEN (CAST(SVS_DT AS DATE) - CAST(DSCH_TS AS DATE)) < 90 THEN 1 
                                                              ELSE 0 
     END AS FU90

答案 1 :(得分:1)

你可以使用下面的一个:

CASE WHEN (EXTRACT(EPOCH FROM (DATE_COLUMN_2 - DATE_COLUMN_1)) < (90*24*60*60) 
    THEN 1 ELSE 0 END AS FU90

这里它以秒为单位返回deference,因此您需要将90天转换为秒

答案 2 :(得分:0)

稍短的CAST版本。

SELECT CASE WHEN SVS_DT::DATE - DSCH_TS::DATE < 90
    THEN 1
    ELSE 0
END 
AS FU90

答案 3 :(得分:0)

我们也可以在不使用任何EXTRACT或CAST关键字的情况下执行此操作:

SELECT CASE WHEN (DATE(SVS_DT)- DATE(DSCH_TS)) < 90
             THEN 1
       ELSE 0
END AS FU90