2014-10-18 74 views
4

我想从对方减去2个日期,但它似乎没有正确减法,我不知道我在这里做错了什么。如果日期之间的差异小于90天,则使用case语句将其标记为1,否则将其标记为0.但即使日期之间的差异大于90天,它也始终标记为1。我在这里是PostgreSQL的,这里是我的情况下声明:该日期的使用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天。所以你需要90天转换成秒

回答

3

一天extract返回日期的当天元素

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

这里返回尊重以秒为:

+0

好知道,感谢的人。 – moe 2014-10-18 18:24:06

1

您可以使用下面一个。由于日期总是在1到31之间,所以最大差值为30,并且不能大于90.

扣除date s以天数形式返回差值,以整数形式表示。所以你只需要拨打extract电话:

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

一个稍短的CAST版本。

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

我们也能做到这一点,而无需使用任何摘录或CAST关键字,如:

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