DATE_PART и Postgresql
У меня проблема, когда я вычитаю две даты в функции DATE_PART
в этом запросе.
SELECT
TO_CHAR(date_trunc('month',sql_activity_days.created_month),'YYYY-MM') AS "sql_activity_days.created_month",
coalesce(SUM(
CASE
WHEN(date_part('day', (sql_activity_days.sale_date + 1) - sql_activity_days.start_date) < 122)
THEN sql_activity_days.cad_net_invoiced
ELSE NULL
END
),0) AS "sql_activity_days.activity_over_122_day_after_signup"
FROM
camel.f_subscription_touch AS subscription_touch
LEFT JOIN sql_activity_days ON subscription_touch.id = sql_activity_days.customer_id
group by date_trunc('month',sql_activity_days.created_month)
order by 1 desc limit
500
База данных PostgreSQL обнаружила ошибку при выполнении этого запроса.
ОШИБКА: функция date_part(unknown, integer) не существует Подсказка: ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам понадобится добавить явное приведение типов. Позиция: 1340
1 ответ
Решение
Второй аргумент функцииdate_part
может быть либо timestamp
или interval
,
Ваше выражение (sql_activity_days.sale_date + 1) - sql_activity_days.start_date
вычитает два dates
, чей результирующий тип данных является целым числом, отсюда и ошибка.
Решение этого было бы удалить date_part
и используйте выражение напрямую. Разница двух дат всегда дает значение в днях.