Интервал динамический (на основе столбцов) -- postgresql поле с участием intervals пол Связанный проблема

Dynamic (Column Based) Interval


70
vote

проблема

русский

Как добавить динамический (на основе колонны) количество дней до сейчас?

 <код> SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"  FROM a;   

Где <код> a.number_of_days - это целое число?

Английский оригинал

How do I add a dynamic (column based) number of days to NOW?

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

Where a.number_of_days is an integer?

</div
     

Список ответов

182
 
vote
vote
Лучший ответ
 

Я обычно умножу номер <код> interval '1 day' или аналогичный, например.:

 <код> select now() + interval '1 day' * a.number_of_days from a;   
 

I usually multiply the number by interval '1 day' or similar, e.g.:

select now() + interval '1 day' * a.number_of_days from a; 
</div
 
 
     
     
28
 
vote

Я знаю, что это год, но если вам нужно использовать столбец, чтобы указать фактический интервал (например, «дни», «месяцы», то стоит знать, что вы также можете отличить свою строку на интервал, Давать:

 <код> SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)   

Так что оригинальный вопрос стал бы:

 <код> Assert0  
 

I know this is a year old, but if you need to use a column to specify the actual interval (e.g. 'days', 'months', then it is worth knowing that you can also CAST your string to an Interval, giving:

SELECT now()+ CAST(the_duration||' '||the_interval AS Interval) 

So the the original question would become:

SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a; 
</div
 
 
   
   
18
 
vote

Я предпочитаю так. Я думаю, что это довольно легко и чисто. В Postgre вам нужен <код> Assert1 для использования <код> Assert2 оператора с <код> Assert3

 <код> Assert4  

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

 <код> Assert5  
 

I prefer this way. I think its pretty easy and clean. In postgre you need interval to use + operator with timestamp

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

where you can use seconds,minutes...days,months... and you can replace the numbers to your column.

select now()+ (column_name||' seconds')::interval,now() from your_table; 
</div
 
 
3
 
vote

Для создания интервалов, основанных на значениях столбцов, я рекомендую добавить два столбца в таблицу. Например, столбец «Progress_Value» :: int4 и столбец "Progress_name" :: varchar. Столбец «Proge_Name» может хранить следующие значения:

    .
  • Microcond
  • milliseconds
  • второй
  • минута
  • час
  • день
  • неделя
  • месяц
  • квартал
  • год
  • Десятилетие
  • век
  • millennium
. + ---------------- + --------------- + |. Preg_Value |. Период_Name |. + ---------------- + --------------- + |. 2 |. минута | + ---------------- + --------------- + 

Теперь вы можете написать:

 <код> SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;   
 

To creating intervals those based on column values, I recommend to add two columns in your table. For example, column "period_value"::INT4 and column "period_name"::VARCHAR. Column "period_name" can store the following values:

  • microsecond
  • milliseconds
  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year
  • decade
  • century
  • millennium
 +--------------+-------------+ | period_value | period_name | +--------------+-------------+ | 2            | minute      | +--------------+-------------+ 

Now you can write:

SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table; 
</div
 
 
 
 
2
 
vote

Используйте <код> make_interval()

 <код> SELECT NOW() + make_interval(days => a.number_of_days) AS "The Future Date"  FROM a;   

Но в целом это может быть лучшее представление о том, чтобы использовать столбец, определенную как <код> interval , то вы можете использовать любой блок, который вы хотите, когда вы храните там значение.

 

Use make_interval()

SELECT NOW() + make_interval(days => a.number_of_days) AS "The Future Date"  FROM a; 

But in general it might be a better idea to use a column defined as interval, then you can use any unit you want when you store a value in there.

</div
 
 
 
 
0
 
vote

Если у нас есть поле с интервальным строковым значением, такими как «41 год 11 мон 4 дня »и хотите преобразовать его на сегодняшний день рождения Используйте этот запрос:

 <код> UPDATE "february14" set dob = date '2014/02/01'  - (patient_age::INTERVAL)    

DOB IS DATE для преобразования '41 ЛЕТ 11 MONS 4 дня ' ' 1972/10/14 ' Например
Patement_age - это поле varchar, которое имеет строку, такую ​​как 41 год 11 монс 4 дня '

И это запрос, чтобы конвертировать возраст на сегодняшний день рождения

 <код> SELECT now() - INTERVAL '41 years 10 mons 10 days';   
 

If we have field with interval string value such as '41 years 11 mons 4 days' and want to convert it to date of birth use this query :

UPDATE "february14" set dob = date '2014/02/01'  - (patient_age::INTERVAL)  

dob is date field to convert '41 years 11 mons 4 days' to '1972/10/14' for example
patient_age is varchar field that have string like '41 years 11 mons 4 days'

And this is query to convert age back to date of birth

SELECT now() - INTERVAL '41 years 10 mons 10 days'; 
</div
 
 
0
 
vote

Обновление на основе идентификатора столбца было полезным способом создания некоторых рандомизированных тестовых данных для меня.

 <Код> update study_histories set last_seen_at = now() - interval '3 minutes' * id;   
 

Updating based on a column ID was a useful way to create some randomised test data for me.

update study_histories set last_seen_at = now() - interval '3 minutes' * id; 
</div
 
 

Связанный проблема

3  Выбор таблицы свойств как столбцы  ( Selecting table of properties as columns ) 
У меня есть две таблицы, <код> things и <код> properties : <код> CREATE TABLE things ( id SERIAL PRIMARY KEY ); CREATE TABLE properties ( thing_id INT...

1  PG_RESTORE: Создание материализованных данных просмотра в течение длительного времени  ( Pg restore creating materialized view data taking long time ) 
Я использую PostgreSQL 9.5.3. Когда я восстанавливаю базу данных, и оно создает материализованные данные просмотра, это требует меня долгое время, более 3 час...

3  python + psycopg2 = неизвестные типы?  ( Python psycopg2 unknown types ) 
Кажется, когда я использую CallProc (), psycopg2 не правильно отличает строки в виде текста или символа. Например: <код> values = [pid, 4, 4, 'bureau ama'...

2  Функция SQL MAX получил другие таблицы  ( Sql max function get other tables ) 
У меня есть простое отношение «море» с только двумя колоннами, как называется «имя», а другая «глубина». Со следующей командой я могу выводить номер максималь...

1  Как отправить столбец Postgres с именем [«app_id»]  ( How do i drop postgres column with name app id ) 
У меня есть столбец Postgres с именем столбца <код> NewReader8 (да с <код> NewReader9 и <код> io.ReaderAt0 ). Я случайно создал это и хочу бросить его. Вс...

0  Не могу получить Postgres, работающие с весенними ботинками, гибернацией, росценой и Heroku  ( Cant get postgres working with spring boot hibernate gradle and heroku ) 
Я пытался развернуть мое приложение к Heroku, он был ранее проходить локально, успешно используя базу данных Hibernate. Теперь я пытаюсь поменяться в базе дан...

0  Hibernate MapedSuplass содержит список сам  ( Hibernate mappedsuperclass contains a list of itself ) 
Есть много разных классов, которые все наследуют от базового класса. Для слоя DataCcess I я аннотировал базовый класс с @MappedSuperclass для реализации пов...

0  Rails find_by_sql Не возвращая результаты  ( Rails find by sql not returning results ) 
Так что мой запрос, который я бегу, возвращает массив с идентификатором и ничего больше. Но когда я бегу один и тот же запрос в PSQL, он возвращает правильные...

18  Почему PUTENV () необходимо на уже определенной переменной среды?  ( Why is putenv needed on an already defined environment variable ) 
Когда <код> php используется как <код> apache модуль, переменная среды, исходящая из Apache SetEnv Directive доступна для PHP <код> getenv() , но он не мо...

1  Обновление PostgreSQL по характеру различная колонна уступляет  ( Postgresql update on character varying column empties it ) 
Я использую драйвер PostgreSQL JDBC для обновления таблицы. Он содержит несколько столбцов, один из них представляет путь к файлу данных записи, с именем Pat...

7  Какой предпочтительный способ подключения к базе данных PostgreSQL от PHP?  ( Whats the preferred way to connect to a postgresql database from php ) 
Я использовал PHP & AMP; MySQL за возрасты и собираюсь начать использовать PostgreSQL вместо этого. Что является предпочтительным методом? Это через объек...

2  Столбец CHAR из результата имеет избыточные пробелы в Postgres  ( The char column of result has redundant spaces in postgres ) 
Я новичок в postgresql, сегодня я использую php pdo для подключения к postgres и user var_dump Распечатать результаты, оно удивительно, что существует много и...

1  PostgreSQL не отображается на функции phpconfig () (в Windows)  ( Postgresql not showing up on phpconfig functionon windows ) 
Я только что установил Apache 2.2.11 и загрузил zip для php5.2.9-2 Я незаспоминал Расширение = php_pdo_pgsql.dll и Расширение = php_pgsql.dll Но...

5  Могу ли я перечислить только таблицы и / или представления, нет индексов?  ( Can i list only tables and or views no indexes ) 
Использование <код> psql на терминал и ищете все таблицы и представления, но " d mySchema. и вкладка" показывает все объекты, не только важные. ...

1  Синхронизация данных между Hadoop и PostgreSQL с помощью симметричныхds  ( Synchronizing data between hadoop and postgresql using symmetricds ) 
Я использую Hadoop, чтобы сохранить данные нашего приложения. Как я могу синхронизировать данные между PostgreSQL и Hadoop? Я использую симметрии в качестве и...

Связанный проблема

3  Выбор таблицы свойств как столбцы 
1  PG_RESTORE: Создание материализованных данных просмотра в течение длительного времени 
3  python + psycopg2 = неизвестные типы? 
2  Функция SQL MAX получил другие таблицы 
1  Как отправить столбец Postgres с именем [«app_id»] 
0  Не могу получить Postgres, работающие с весенними ботинками, гибернацией, росценой и Heroku 
0  Hibernate MapedSuplass содержит список сам 
0  Rails find_by_sql Не возвращая результаты 
18  Почему PUTENV () необходимо на уже определенной переменной среды? 
1  Обновление PostgreSQL по характеру различная колонна уступляет 
7  Какой предпочтительный способ подключения к базе данных PostgreSQL от PHP? 
2  Столбец CHAR из результата имеет избыточные пробелы в Postgres 
1  PostgreSQL не отображается на функции phpconfig () (в Windows) 
5  Могу ли я перечислить только таблицы и / или представления, нет индексов? 
1  Синхронизация данных между Hadoop и PostgreSQL с помощью симметричныхds