sql >> Base de Datos >  >> RDS >> PostgreSQL

Generar series de fechas - usando el tipo de fecha como entrada

Gracias a la resolución de tipo de función también podemos pasar date valores a generate_series() porque hay un implícito emitido desde date a timestamp así como desde date a timestamptz . Sería ambiguo, pero timestamptz es "preferido" entre "Tipos de fecha/hora". Explicación detallada:

  • Generación de series temporales entre dos fechas en PostgreSQL

Para una simple date la hora local 00:00 se asume en el reparto. Tenga en cuenta que la configuración de la zona horaria actual afecta directamente el resultado si usa date como entrada ya que, obviamente, '2014-01-10 00:00' representa un momento diferente 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 .. al usar CAST o :: sintaxis.
Assignment cast .. conversión implícita cuando se asigna un valor a una columna de destino.
Implicit cast .. conversiones implícitas en todas las demás expresiones.

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

Para ver qué moldes están definidos a 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 lanzamientos son implícitos . Por documentación en castcontext :

Indica en qué contextos se puede invocar el cast. e significa solo como un lanzamiento explícito (usando CAST o :: sintaxis). a significa desasignación implícita a una columna de destino, así como explícitamente. i significa implícitamente en expresiones, así como los demás casos.

Énfasis en negrita mío.