Я пытаюсь переписать две части кода SQL Server в PostgreSQL.
1-й это:
WHERE
(DATEADD(S, Submit_Date, '1970-01-01')) >= DATEADD(d, -3, GETDATE())
OR
(DATEADD(S, Last_Changed_Date, '1970-01-01')) >= DATEADD(d, -3, GETDATE())
Я продолжаю получать сообщение об ошибке относительно буквы S после DATEADD.
2-й это:
WHERE (dbo.Test.[Log] LIKE '%%Status: Closed%%')
GROUP BY dbo.PYR.ID_Number
Мне нужна помощь, чтобы упомянутые строки кода SQL Server были изменены для PostreSQL.
Есть предложения, как они должны быть?
Спасибо.
Для номера 2 postgre не использует скобки []
where to_timestamp(submit_date) >= current_date - interval '3 days' or to_timestamp(last_changed_date) >= current_date - interval '3 days'where test."Log" ~* 'Status: Closed' group by pyr.id_numberОтметьте только те rdbms, в которых вы хотите получить свое решение, и предоставьте минимальный воспроизводимый пример, чтобы объяснить, что должен делать запрос.


WHERE
('1970-01-01'::timestamp + interval '1 second' * submit_date) >= now()+interval '-3 days'
OR
('1970-01-01'::timestamp + interval '1 second' * Last_Changed_date) >= now()+interval '-3 days'
WHERE (dbo.Test."Log" ILIKE '%%Status: Closed%%')
GROUP BY dbo.PYR.ID_Number
Если у submit_date и Last_Changed_date есть индексы, то следующий запрос, вероятно, будет работать лучше, чем исходный первый запрос:
WHERE submit_date >= extract(epoch FROM now() - interval '3 days')
OR Last_Changed_date >= now() - interval '3 days')
Избегайте операций над столбцами в предложении WHERE, чтобы условие можно было проверить (поиск ARGument ABLE); то есть механизм базы данных может сканировать индекс, когда он доступен, вместо последовательного чтения всей таблицы.
Я решил использовать - interval '3 days' вместо + interval '-3 days' для удобочитаемости. Вычитание интервала вместо добавления отрицательного интервала создает меньшую когнитивную нагрузку на читателя, особенно когда - скрыт в строке на некотором расстоянии от +.
Второй запрос можно переписать следующим образом:
WHERE Test."Log" ILIKE '%%Status: Closed%%'
GROUP BY dbo.PYR.ID_Number
Хотя dbo.Test."Log" также работает как ссылка на столбец, лучше включать схему только в ссылку на таблицу в предложении FROM, так как это сводит к минимуму количество изменений, которые необходимо внести в запрос при изменении схемы.
Если это частое условие запроса и это большая таблица, изучите варианты индексации Test."Log".