使用PostgreSQL减去两个日期

问题描述 投票:4回答:4

我试图从彼此减去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天。

sql postgresql date
4个回答
3
投票

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

减去dates以整数形式返回天数差异。所以你只需要删除extract调用:

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

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天转换为秒


0
投票

略短的CAST版本。

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

0
投票

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

SELECT CASE WHEN (DATE(SVS_DT)- DATE(DSCH_TS)) < 90
             THEN 1
       ELSE 0
END AS FU90
© www.soinside.com 2019 - 2024. All rights reserved.