¿Cómo puedo añadir una dinámica (columna) basado en el número de días a AHORA?

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

Donde a.number_of_days es un número entero?

InformationsquelleAutor explodes | 2011-03-10

5 Comentarios

  1. 135

    Me suele multiplicar el número por interval '1 day' o similares, por ejemplo:

    select now() + interval '1 day' * a.number_of_days from a;
    • Buen truco, no sabía que esto era posible.
    • Sí, esto funcionó!
    • 7 años después, sigue siendo la mejor solución. Increíble.
    • Yayy! Esto funcionó!!!
    • Buen truco, pero a mí me parece la mejor de las soluciones son los de abajo, donde echaron el campo concatenado(s) a un intervalo, ya sea utilizando YESO o ::intervalo.
  2. 23

    Sé que este es un año de edad, pero si usted necesita utilizar una columna para especificar el intervalo real (por ejemplo, ‘días’, ‘meses’, entonces vale la pena saber que también se puede convertir una cadena a un Intervalo, dando:

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

    Así que la pregunta original sería:

    SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
    • si desea tener más control sobre lo que los valores en la columna de las unidades sería, usted puede decodificar ti mismo: select *, num * case unit when 'W' then '1 week'::interval when 'D' then '1 day'::interval when 'H' then '1 hour'::interval end from (values(1,'W'),(2,'D'),(3,'H')) x(num, unit)
    • gracias, eso me ayudó mucho. Pero no te olvides de cambiar las comillas para postgres: SELECT now() + CAST(a.number_of_days||' DAYS' AS Interval) as "The Future Date" FROM a;
  3. 7

    Yo prefiero esta. Creo que es bastante sencillo y limpio.
    En postgre necesita interval utilizar + operador con timestamp

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

    donde se puede utilizar segundos,minutos, días,meses…
    y usted puede reemplazar los números de la columna.

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

    A la creación de los intervalos de los que se basan en los valores de columna, recomiendo agregar dos columnas en la tabla. Por ejemplo, la columna «period_value»::INT4 y de la columna «period_name»::VARCHAR.
    Columna «period_name» puede almacenar los siguientes valores:

    • microsegundo
    • milisegundos
    • segundo
    • minutos
    • hora
    • día
    • semana
    • mes
    • trimestre
    • año
    • década
    • siglo
    • milenio
    +--------------+-------------+ 
    | period_value | period_name | 
    +--------------+-------------+ 
    | 2 | minuto | 
    +--------------+-------------+ 
    

    Ahora se puede escribir:

    SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
    • bien hecho! gracias
  5. 0

    Si hemos de campo con intervalo de cadena de valor, tales como ’41 años, el 11 de mons 4 días y quieren convertir a la fecha de nacimiento utilice esta consulta :

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

    fecha de nacimiento es campo de fecha para convertir ’41 años, el 11 de mons 4 días a ‘1972/10/14’ por ejemplo

    patient_age es de tipo varchar campo de cadena como ’41 años, el 11 de mons 4 días

    Y esta es la consulta a convertir edad posterior a la fecha de nacimiento

    SELECT now() - INTERVAL '41 years 10 mons 10 days';

Dejar respuesta

Please enter your comment!
Please enter your name here