tutorial - ver una vista postgresql
Intervalo dinámico(basado en columnas) (5)
Para crear intervalos basados en valores de columna, recomiendo agregar dos columnas en su tabla. Por ejemplo, la columna "período_valor" :: INT4 y la columna "nombre_período" :: VARCHAR. La columna "nombre_período" puede almacenar los siguientes valores:
- microsegundo
- milisegundos
- segundo
- minuto
- hora
- día
- semana
- mes
- trimestre
- año
- década
- siglo
- milenio
+--------------+-------------+ | period_value | period_name | +--------------+-------------+ | 2 | minute | +--------------+-------------+
Ahora puedes escribir:
SELECT NOW() - (period_value::TEXT || '' '' || period_name::TEXT)::INTERVAL FROM table;
¿Cómo agrego un número dinámico de días (basado en columnas) a AHORA?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
¿Dónde a.number_of_days
es un entero?
Por lo general, multiplico el número por el interval ''1 day''
o similar, por ejemplo:
select now() + interval ''1 day'' * a.number_of_days from a;
Sé que este tiene un año de antigüedad, pero si necesita usar una columna para especificar el intervalo real (por ejemplo, "días", "meses", entonces vale la pena saber que también puede conectar su cadena a un intervalo, dando:
SELECT now()+ CAST(the_duration||'' ''||the_interval AS Interval)
Así que la pregunta original se convertiría en:
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
Si tenemos un campo con un valor de cadena de intervalo como ''41 años 11 meses 4 días ''y queremos convertirlo a la fecha de nacimiento, utilice esta consulta:
UPDATE "february14" set dob = date ''2014/02/01'' - (patient_age::INTERVAL)
dob es el campo de fecha para convertir ''41 años 11 meses 4 días '' a '' 1972/10/14 '' por ejemplo
patient_age es un campo varchar que tiene una cadena como ''41 años 11 meses 4 días ''
Y esta es la consulta para convertir la edad de nuevo a la fecha de nacimiento.
SELECT now() - INTERVAL ''41 years 10 mons 10 days'';
Yo prefiero esta manera. Creo que es bastante fácil y limpio. En postgre necesitas un interval
para usar el operador +
con timestamp
select (3||'' seconds'')::interval;
select now()+ (10||'' seconds'')::interval,now();
donde puede usar segundos, minutos ... días, meses ... y puede reemplazar los números a su columna.
select now()+ (column_name||'' seconds'')::interval,now()
from your_table;