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 и используйте выражение напрямую. Разница двух дат всегда дает значение в днях.

Другие вопросы по тегам