2014-10-18 124 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