хочу отнять от даты указанное количество дней.
startDate - '"table.days" days'::interval
Как можно это сделать?
startDate - "table"."days" * interval '1' day
Number не является датой. Делайте в соответствии со своим форматом хранения
startDate - make_interval(days => table.days) https://postgrespro.ru/docs/postgresql/14/functions-datetime#id-1.5.8.15.6.2.2.28.1.1.1
а если у меня table.days может быть null? COALESCE не срабатывает
А-а-а-а! COALESCE несрабатывает!!! Срочно пишыте на bugs@postgresql.org, сервер сломан!!!!!
А вы точно правильно им пользуетесь? У меня срабатывает: SELECT now() - make_interval(days => COALESCE(t.days, 0)) FROM (VALUES (1), (NULL), (7)) AS t(days);
А почему так может быть? select now() - make_interval(days => coalesce(o."daysBeforeSendMail", 2)) from organization_entity o;
Потому, что вы набрали такой текст запроса...
Это слишком многое объясняет практически по всем вопросам в этом чате)))
Ну, если бы там хотя бы результат был, а лучшэ -- результат с предположэнием что в нём не так -- это бы объясняло только частично...
Ну вообще какой вопрос, такой и ответ. Почему так? Потому что вы это написали. Вы-же не спрашиваете что вы делаете не так.
Запрос выглядит правильно. А в чём именно он работает неправильно?
Я тестирую его в psql, отдельно запросы работают но не вместе. No function matches the given name and argument types. You might need to add explicit type casts.
Наверное, нужно все же добавить приведение типов, или к исходной колонке или к результату coalesce. Какая версия pg?
Может, у вас колонка не целочисленная? На какие типы-то ругается?
Блин, я про это вообще забыл, там тип numeric
Ну, какой там тип этого аргумента? int? Вот и приведите к int, coalesce(...)::int
Обсуждают сегодня