2012-02-21 14 views
9

En PostgreSQL Quiero concat la current_timestamp con un interval de la siguiente manera:PostgreSQL cómo concat valor de intervalo '2 días

select current_timestamp + interval 2||' days' 

Pero cuando lo hago, me sale un error:

[Err] ERROR: syntax error at or near "2" 
LINE 1: select current_timestamp + interval 2||' days' 

pero si lo hago de esta manera, funciona correctamente:

select current_timestamp + interval '2 days' 

¿Por qué un trabajo, pero no el otro?

Con referencia a la página siguiente http://www.postgresql.org/docs/8.0/static/functions-datetime.html

+0

¿Está ** realmente ** usando 8.0? (su enlace al manul usa esa versión) –

Respuesta

18

Parte del problema es que la expresión SQL estándar para los intervalos, cita el número, pero no las palabras clave. Así que hay que tener cuidado.

select current_date, current_date + interval '2' day; 
-- 
2012-02-21 2012-02-23 00:00:00 

En PostgreSQL, citar como '2 días' y '2 días' también funciona. Entonces podrías pensar que '2' || 'días' sería equivalente, pero no lo es.

select current_date, current_date + interval '2' || ' days'; 
-- 
2012-02-21 2012-02-21 00:00:02 days 

La solución, como A.H. dijo, es convertir la cadena resultante como un intervalo.

También puede utilizar una variable en lugar de 2. Esto genera un calendario para 2012.

-- 0 to 365 is 366 days; 2012 is a leap year. 
select ('2012-01-01'::date + (n || ' days')::interval)::date calendar_date 
from generate_series(0, 365) n; 

uso esa última escayola hasta la fecha, debido a la fecha + intervalo devuelve una marca de tiempo.

16

Por favor, intente esta sintaxis:

select current_timestamp + (2 || ' days')::interval; 

o incluso éste:

select current_timestamp + 2 * interval '1 day'; 
Cuestiones relacionadas