Как добавить динамическое (на основе столбца) количество дней в СЕЙЧАС?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
Где a.number_of_days
- целое число?
Как добавить динамическое (на основе столбца) количество дней в СЕЙЧАС?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
Где a.number_of_days
- целое число?
Я обычно умножаю число на interval '1 day'
или подобное, например:
select now() + interval '1 day' * a.number_of_days from a;
Я знаю, что это год, но если вам нужно использовать столбец для указания фактического интервала (например, "дни", "месяцы", то стоит знать, что вы также можете CAST свою строку на интервал, подача:
SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)
Итак, исходный вопрос станет следующим:
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
Чтобы создавать интервалы, основанные на значениях столбцов, я рекомендую добавить в таблицу два столбца. Например, столбец "period_value":: INT4 и столбец "period_name":: VARCHAR. Столбец "period_name" может хранить следующие значения:
+--------------+-------------+ | period_value | period_name | +--------------+-------------+ | 2 | minute | +--------------+-------------+
Теперь вы можете написать:
SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
Если у нас есть поле с интервальным значением строки, например "41 год 11 монов 4 дня" и хотите преобразовать его в дату рождения, используйте этот запрос:
UPDATE "february14" set dob = date '2014/02/01' - (patient_age::INTERVAL)
dob - это поле даты для преобразования '41 лет 11 монов 4 дня в '1972/10/14' например
patient_age - это поле varchar, которое имеет строку типа "41 год 11 месяцев 4 дня"
И это запрос, чтобы преобразовать возраст к дате рождения
SELECT now() - INTERVAL '41 years 10 mons 10 days';
Я предпочитаю этот путь. Я думаю, что это довольно легко и чисто.
В postgre вам нужно interval
использовать оператор +
с timestamp
select (3||' seconds')::interval;
select now()+ (10||' seconds')::interval,now();
где вы можете использовать секунды, минуты... дни, месяцы... и вы можете заменить номера на свой столбец.
select now()+ (column_name||' seconds')::interval,now()
from your_table;