ultimo rango operaciones obtener mes manipulacion insertar hora fechas fecha extraer consultar con comparar actual postgresql types timestamp postgresql-9.1 generate-series

postgresql - rango - Generar series de fechas, utilizando el tipo de fecha como entrada



obtener hora de timestamp postgresql (1)

La segunda forma de generate_series() siempre devuelve timestamptz y siempre toma timestamptz como entrada.

timestamp y la date se fuerzan automáticamente a timestamptz . Para una date 00:00 se asume la hora local 00:00 en el proceso.

Tenga en cuenta que la configuración actual de la zona horaria afecta directamente el resultado si utiliza la date y la timestamp como entrada, ya que, obviamente, ''2014-01-10 00:00'' representa un punto diferente en el tiempo en Tokio que en Nueva York.

¿Cómo decide Postgres qué tipos son aceptables?

Postgres básicamente distingue entre tres tipos de moldes .

Explicit casts ... cuando se usa CAST o :: sintaxis.
Assignment cast ... conversión implícita cuando se asigna un valor a una columna de destino.
Implicit cast implícito .. moldes implícitos en todas las demás expresiones.

Tiene que haber una conversión implícita registrada en el sistema del tipo de entrada al tipo esperado para hacer que una función acepte (y convierta) en silencio un valor de entrada.

Para ver qué moldes están definidos en timestamptz , puede consultar la tabla de catálogo pg_cast :

SELECT castsource::regtype, casttarget::regtype, castcontext FROM pg_cast WHERE casttarget = ''timestamptz''::regtype; castsource | casttarget | castcontext -----------------------------+--------------------------+------------- abstime | timestamp with time zone | i date | timestamp with time zone | i timestamp without time zone | timestamp with time zone | i timestamp with time zone | timestamp with time zone | i

Todos estos moldes son implícitos . Por documentación en castcontext :

Indica en qué contextos se puede invocar al elenco. e significa solo como un elenco explícito (usando CAST o :: sintaxis). a significa implícitamente en la asignación a una columna de destino, así como explícitamente. significa implícitamente en expresiones, así como en los otros casos.

Negrita énfasis mío.

La documentación para generate_series dice que el argumento puede ser int o bigint para generate_series(start, stop) y generate_series(start, stop, step) casos y timestamp o timestamp with time zone para generate_series(start, stop, step interval) .

¿Cuál es la razón por la que generate_series funciona también con date type como entrada y devuelve timestamp with timezone ?

pg=# select generate_series(''2014-01-01''::date,''2014-01-02''::date,''1 day''); generate_series ------------------------ 2014-01-01 00:00:00+01 2014-01-02 00:00:00+01 (2 rows)