Преобразование арифметики даты Oracle в PostgreSQL - PullRequest
0 голосов
/ 05 октября 2018

У меня есть этот запрос Oracle:

select sm.*
from MESSAGES sm
where sm.delivery_finished = 0
  and (sm.last_sent_date is null or (SYSDATE - sm.last_sent_date) * 24 * 60 * 60 > sm.delay)
  and sm.status = 'REQUEST_READY'
order by nvl(sm.last_sent_date, to_date('2000.01.01', 'yyyy-MM-dd'))

Как мне переписать этот запрос для PostgreSQL?

Я пробовал это:

select sm.*
from MESSAGES sm
where sm.delivery_finished = 0
  and (sm.last_sent_date is null or (now() - sm.last_sent_date) * 24 * 60 * 60 > sm.delay)
  AND sm.status = 'REQUEST_READY'
order by COALESCE(sm.last_sent_date, to_date('2000.01.01', 'yyyy-MM-dd'))

Но на этой строке:

now() - sm.last_sent_date) * 24 * 60 * 60 > sm.delay

Я получаю сообщение об ошибке:

[42883] ОШИБКА: оператор не существует: интервал> целое число
Подсказка: оператор с указанным именем и типамиаргументов не найдено.Возможно, вам следует добавить явные преобразования типов.Положение: 148

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Как говорится в ошибке:

оператор не существует: интервал> целое число

Вы должны явно ввести один из двух аргументов.В PostgreSQL вы можете использовать :: требуемый_тип для приведения столбца.

Полагаю, в вашем случае вы должны добавить :: integer после закрывающей скобки

0 голосов
/ 05 октября 2018

Если вы хотите сделать вычитание времени, я бы использовал функцию EXTRACT .

EXTRACT(SECOND FROM now() - sm.last_sent_date)  * 24 * 60 * 60 > sm.delay

Мы можем видеть, что now()- '2000.01.01'::timestamp вернет interval, а не целое число.

так EXTRACT функция может помочь получить сумму из вычитания времени

Запрос 1 :

SELECT  now()- '2000.01.01'::timestamp,
        EXTRACT(SECOND FROM now() - '2000.01.01'::timestamp) 

Результаты :

|                                                ?column? | date_part |
|---------------------------------------------------------|-----------|
| 0 years 0 mons 6852 days 8 hours 47 mins 37.710379 secs | 37.710379 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...