Amazon Redshift dateadd () в заявлении CASE

Я пытаюсь добавить дату в оператор case

select the_date, 
(case 
when the_date like '%years%' then dateadd(year,REPLACE(REGEXP_SUBSTR(condition_, '-?[0-9]+\.? years'),'years',''),the_date)
end) 
from customer

Но я получаю следующую ошибку:

Ошибка SQL [500310] [42883]: недопустимая операция Amazon: функция pg_catalog.date_add («неизвестно», текст, временная метка с часовым поясом) не существует;

Кто-нибудь может помочь, пожалуйста?


person Lilz    schedule 13.08.2019    source источник


Ответы (1)


Вы должны привести второй параметр к INT, а третий параметр к timestamp (в настоящее время это timestamptz.

Это подпись DATEADD:

DATEADD( datepart, interval, {date|timestamp} )

Ваш запрос должен выглядеть примерно так:

select the_date, 
(case when the_date like '%years%' then 
    dateadd(
         year,
         REPLACE(REGEXP_SUBSTR(condition_, '-?[0-9]+\.? years'),'years','')::INT,
         the_date::timestamp
    )
end) 
from customer

В качестве альтернативы вы можете использовать простой оператор + с interval. Таким образом вы можете сохранить тип данных timestamptz для the_date:

select the_date, 
(case when the_date like '%years%' then 
    the_date + (interval '1 year' * REPLACE(REGEXP_SUBSTR(condition_, '-?[0-9]+\.? years'),'years','')::INT)
    )
end) 
from customer
person botchniaque    schedule 13.08.2019
comment
спасибо, но, к сожалению, по-прежнему возникает та же ошибка: Ошибка SQL [500310] [42883]: [Amazon] (500310) Недопустимая операция: функция pg_catalog.date_add (неизвестно, целое число, метка времени с часовым поясом) не существует; - person Lilz; 13.08.2019
comment
вам также необходимо преобразовать the_date из timestamptz в timestamp - person botchniaque; 13.08.2019
comment
В качестве альтернативы вы можете использовать простой + с интервалом, поскольку он поддерживается типом данных timestamptz. Добавлю пример. - person botchniaque; 13.08.2019