Подтвердить что ты не робот

Динамический (на основе столбца) интервал

Как добавить динамическое (на основе столбца) количество дней в СЕЙЧАС?

SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date" 
FROM a;

Где a.number_of_days - целое число?

4b9b3361

Ответ 1

Я обычно умножаю число на interval '1 day' или подобное, например:

select now() + interval '1 day' * a.number_of_days from a;

Ответ 2

Я знаю, что это год, но если вам нужно использовать столбец для указания фактического интервала (например, "дни", "месяцы", то стоит знать, что вы также можете 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;

Ответ 3

Чтобы создавать интервалы, основанные на значениях столбцов, я рекомендую добавить в таблицу два столбца. Например, столбец "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;

Ответ 4

Если у нас есть поле с интервальным значением строки, например "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';

Ответ 5

Я предпочитаю этот путь. Я думаю, что это довольно легко и чисто. В postgre вам нужно interval использовать оператор + с timestamp

select (3||' seconds')::interval;

select now()+ (10||' seconds')::interval,now();

где вы можете использовать секунды, минуты... дни, месяцы... и вы можете заменить номера на свой столбец.

select now()+ (column_name||' seconds')::interval,now()
from your_table;