Como ya sabéis, en PostgreSQL disponemos de gran variedad de tipos de datos nativos para almacenar nuestros valores. En entradas anteriores vimos los tipos de datos especiales (Geometric, Network Address, Enumeradores, Array) y los tipos de datos más utilizados (Numeric. Character, Date Time, Boolean). En esta ocasión vamos a indagar en el Date / Time Type, los tipos de datos para almacenar fechas y hora en nuestras bases de datos de PostgreSQL.
Uno de los tipos de datos más utilizados son los de fecha y hora, estos suelen traer más de un quebradero de cabeza por la diversidad de los formatos que podemos utilizar. PostgreSQL nos permite almacenar solamente fechas (Date Types), sólo la hora (Time Types) o ambos (Timestamp Type). A continuación vamos a describir cada uno de ellos.
¿Quieres ser un profesional trabajando como Administrador de Bases PostgreSQL? ¿Ampliar tus conocimientos? Mira nuestro listado de Carreras para PostgreSQL.
Tipos Fechas (Date Type)
Soporta casi cualquier formato de entrada, incluyendo el formato ISO 8601, SQL, Postgres y otros. Podemos modificar el modo de entrada para las fechas con el parámetro DataStyle, veamos la siguiente tabla.
MODO | FORMATO |
---|---|
MDY | mes-día-año |
DMY | día-mes-año |
YDM | año-día-mes |
Dependiendo del formato y del modo que se configure el parámetro DataStyle, los valores de las fechas pueden variar. Para entender las diferencias más sencillo, veamos la siguiente tabla.
EJEMPLO | FORMATO | VALOR |
---|---|---|
1999-01-08 | ISO 8601 | día 8 del mes enero del año 1999 |
1/8/1999 | MDY | día 8 del mes enero del año 1999 |
1/8/1999 | DMY | día 1 del mes agosto del año 1999 |
01/02/03 | MDY | día 2 del mes enero del año 2003 |
01/02/03 | DMY | día 1 del mes febrero del año 2003 |
01/02/03 | YMD | día 3 del mes febrero del año 2001 |
Tipos Horas (Time Type)
Para las entradas de horas también soporta los mismos formatos que el Date Types (ISO 8601, SQL, Postgres). Por defecto Time Types es sin la zona horaria (without time zone), podemos especificar la zona horaria de la siguiente forma “time with time zone”.
PostgreSQL te permite especificar zonas horarias en tres formas diferentes:
- Especificar el nombre de la zona horaria completa, en la vista pg_timezone_names podemos ver los nombres. Los nombre implican una regla local de horario de verano, y por lo tanto tienen dos posibles conversiones UTC.
- Otra forma es indicando una abreviatura de la zona horaria, en la vista pg_timezone_abbrevs nos indica las abreviaturas que podemos especificar. Las abreviaturas representan un desplazamiento específico de UTC.
- Especificaciones de zona horaria de estilo POSIX . Es una abreviatura de zona, un desplazamiento numérico en horas al oeste de UTC, y una abreviatura opcional de zona de horario de verano (EST5EDT).
Se recomienda el uso de tipos de fecha / hora que contengan tanto la fecha como la hora cuando se usan zonas horarias, Por ello vamos a hablar a continuación sobre el Timestamp Type.
Tipos Fechas y horas (Timestamp Type)
Una entrada valida para este tipo de dato es una concatenación de una fecha y una hora. Opcionalmente se le puede especificar una zona horaria utilizando el Timestamptz Type. En el caso que no se especifique la zona horaria, PostgreSQL utiliza el valor indicado en el parámetro TimeZone.
Para entender la diferencia entre el formato de nombre completo y la abreviatura cuando se especifica la zona horaria, ponemos un sencillo ejemplo:
EJEMPLO | EXPLICACIÓN | TIEMPO UNIVERSAL COORDINADO |
---|---|---|
2018-06-04 12:00 Europe/Madrid | Esta fecha representa la hora local del mediodía en España, que para esta fecha en particular era el horario de verano de Europa central. | (UTC+2) |
2018-06-04 12:00 CET | Especifica el mismo instante de tiempo, pero la hora estándar de Europa central. Independientemente de si estaba establecido el horario de verano en tal fecha. | (UTC+1) |
2018-06-04 12:00 CEST & 2018-06-04 12:00 CETDST | Especificando estas dos abreviaturas, establecemos el horario de verano de Europa central que es el equivalente a especificar el nombre completo | (UTC+2) |
Como véis, PostgreSQL es capaz de almacenar diversos datos de tipos de datos relacionados con fechas y horas. ¿Conociáis todos estos tipos? ¿Echáis de menos alguno de ellos?