Получите разницу между днями только тогда, когда разница положительна - PullRequest
0 голосов
/ 29 февраля 2020

Используя Postgresql, мне нужно вычесть две даты и показать результат только тогда, когда результат разницы между датами положителен или равен 0. Чтобы вычесть даты, я использую это:

SELECT
EXTRACT(EPOCH FROM ('2019-02-11 17:59:01.953894'::timestamp - '2019-12-09 02:08:16.01493'::timestamp))/60

Однако мне нужно что-то вроде этого:

SELECT
    DECODE(SIGN(EXTRACT(EPOCH FROM ('2019-02-11 17:59:01.953894'::timestamp - '2019-12-09 02:08:16.01493'::timestamp))/60 as d),-1, None,
                                                                                                                                ,1, d) 

При выполнении предыдущего запроса я получаю сообщение об ошибке:

ERROR:  syntax error at or near "as"
LINE 2: ...mestamp - '2019-12-09 02:08:16.01493'::timestamp))/60 as df)
                                                                 ^

У вас есть представление о том, как чтобы справиться с этим?

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Вы можете использовать GREATEST, чтобы превратить отрицательные значения в 0:

GREATEST(
    EXTRACT(EPOCH FROM (ts1 - ts2))/60,
    0
)

Или, если вы хотите получить результат null, когда разница отрицательна, вы можете использовать выражение case, которое сравнивает временные метки, прежде чем пытаться их вычесть:

CASE WHEN ts1 > ts2 THEN  EXTRACT(EPOCH FROM (ts1 - ts2))/60 END
1 голос
/ 29 февраля 2020

Попробуйте это:

  SELECT greatest((EXTRACT(epoch from age('2019-02-11', now())) / 86400)::int, 0) 
...