LINUX.ORG.RU

Перевод запросов DB2 MySQL на PostgreSQL

 , , ,


0

1

Добрый день. Стоит задача адаптировать выгрузку DB2 MySQL на PostgreSQL. Споткнулась на циклах с датами, не могу найти правильного синтаксиса. Исходный запрос:

WITH DATES(D) AS
(SELECT TIMESTAMP_FORMAT(?,'YYYYMMDD') AS D FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT D + 1 DAYS AS D FROM DATES WHERE D < TIMESTAMP_FORMAT(?,'YYYYMMDD'))

Что в PostgreSQL является виртуальной пустой страницей? Для DB2 это SYSIBM.SYSDUMMY1 Для Oracle это DUAL Заранее благодарна.

Скорее всего вы ищете что-то типа этого:

WITH RECURSIVE dates AS (
	SELECT 
		 '2022-11-01'::timestamp AS dt
	UNION 
	SELECT
		dt + INTERVAL '1 day'AS dt
	FROM 
		dates
	WHERE
		dt < '2023-01-01'
)
SELECT * FROM dates

Но

  • я не понял слово «MySQL» рядом со словом «DB2».
  • ещё больше не понял мысль про «виртуальную страницу»
  • и символ "?" - предполагаю это запчасть от какого-то шаблонизатора запросов.
Toxo2 ★★★★
()
Последнее исправление: Toxo2 (всего исправлений: 1)
Ответ на: комментарий от Toxo2

Ты не понял главного - для ТС эта портянка натурально просто набор символов. Ему посоветовали убрать FROM, он убрал. Посоветуй заменить MM на mm - посмотри что будет.

Anoxemian ★★★★★
()
Ответ на: комментарий от Toxo2

Спасибо за направление мысли. Решение найдено

SELECT * FROM generate_series(to_date('20221201'::varchar, 'yyyymmdd'),to_date('20221220'::varchar, 'yyyymmdd'), '1 day'::INTERVAL)

про «виртуальную страницу» - банальная очепятка, подразумевалась виртуальная пустая таблица символ «?» подразумевал вопрос в конце предложения.

ekoz9791
() автор топика
Ответ на: комментарий от ekoz9791

Через generate_series тут действительно лучше.

Я пытался ваш запрос буквально и дословно перевести. Хорошо, что не стали так делать.

Про "?" - речь была про TIMESTAMP_FORMAT(?,'YYYYMMDD'). Вот тут - скорее всего что-то должно подставляться вместо "?" в вашем приложении, уж не знаю в каком месте.

Решение найдено

Ну и чудненько.

Toxo2 ★★★★
()