PostgreSQL - Funciones y operadores DATE / TIME
Hemos hablado de los tipos de datos de fecha / hora en el capítulo Tipos de datos . Ahora, veamos los operadores y funciones de fecha / hora.
La siguiente tabla enumera los comportamientos de los operadores aritméticos básicos:
Operador | Ejemplo | Resultado |
---|---|---|
+ | fecha '2001-09-28' + entero '7' | fecha '2001-10-05' |
+ | fecha '2001-09-28' + intervalo '1 hora' | marca de tiempo '2001-09-28 01:00:00' |
+ | fecha '2001-09-28' + hora '03: 00 ' | marca de tiempo '2001-09-28 03:00:00' |
+ | intervalo '1 día' + intervalo '1 hora' | intervalo '1 día 01:00:00' |
+ | marca de tiempo '2001-09-28 01:00' + intervalo '23 horas ' | marca de tiempo '2001-09-29 00:00:00' |
+ | tiempo '01: 00 '+ intervalo' 3 horas ' | tiempo '04: 00: 00 ' |
- | - intervalo '23 horas ' | intervalo '-23: 00: 00' |
- | fecha '2001-10-01' - fecha '2001-09-28' | entero '3' (días) |
- | fecha '2001-10-01' - entero '7' | fecha '2001-09-24' |
- | fecha '2001-09-28' - intervalo '1 hora' | marca de tiempo '2001-09-27 23:00:00' |
- | hora '05: 00 '- hora '03: 00' | intervalo '02: 00: 00 ' |
- | tiempo '05: 00 '- intervalo' 2 horas ' | tiempo '03: 00: 00 ' |
- | marca de tiempo '2001-09-28 23:00' - intervalo '23 horas ' | marca de tiempo '2001-09-28 00:00:00' |
- | intervalo '1 día' - intervalo '1 hora' | intervalo '1 día -01: 00: 00' |
- | marca de tiempo '2001-09-29 03:00' - marca de tiempo '2001-09-27 12:00' | intervalo '1 día 15:00:00' |
* | 900 * intervalo '1 segundo' | intervalo '00: 15: 00 ' |
* | 21 * intervalo '1 día' | intervalo '21 días ' |
* | doble precisión '3,5' * intervalo '1 hora' | intervalo '03: 30: 00 ' |
/ | intervalo '1 hora' / precisión doble '1,5' | intervalo '00: 40: 00 ' |
La siguiente es la lista de todas las funciones importantes relacionadas con la fecha y la hora disponibles.
S. No. | Función descriptiva |
---|---|
1 | AÑOS() Restar argumentos |
2 | FECHA / HORA ACTUAL () Fecha y hora actual |
3 | DATE_PART () Obtener subcampo (equivalente a extraer) |
4 | EXTRAER() Obtener subcampo |
5 | ISFINITE () Prueba de fecha, hora e intervalo finitos (no +/- infinito) |
6 | JUSTIFICAR Ajustar intervalo |
AGE (marca de tiempo, marca de tiempo), AGE (marca de tiempo)
S. No. | Función descriptiva |
---|---|
1 | AGE(timestamp, timestamp) Cuando se invoca con la forma TIMESTAMP del segundo argumento, AGE () resta argumentos, produciendo un resultado "simbólico" que usa años y meses y es de tipo INTERVAL. |
2 | AGE(timestamp) Cuando se invoca solo con TIMESTAMP como argumento, AGE () se resta de current_date (a la medianoche). |
Ejemplo de la función AGE (marca de tiempo, marca de tiempo) es -
testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');
La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:
age
-------------------------
43 years 9 mons 27 days
Ejemplo de la función EDAD (marca de tiempo) es -
testdb=# select age(timestamp '1957-06-13');
La declaración de PostgreSQL dada anteriormente producirá el siguiente resultado:
age
--------------------------
55 years 10 mons 22 days
FECHA / HORA ACTUAL ()
PostgreSQL proporciona una serie de funciones que devuelven valores relacionados con la fecha y hora actuales. A continuación se muestran algunas funciones:
S. No. | Función descriptiva |
---|---|
1 | CURRENT_DATE Entrega la fecha actual. |
2 | CURRENT_TIME Entrega valores con zona horaria. |
3 | CURRENT_TIMESTAMP Entrega valores con zona horaria. |
4 | CURRENT_TIME(precision) Opcionalmente, toma un parámetro de precisión, lo que hace que el resultado se redondee a esa cantidad de dígitos fraccionarios en el campo de segundos. |
5 | CURRENT_TIMESTAMP(precision) Opcionalmente, toma un parámetro de precisión, lo que hace que el resultado se redondee a esa cantidad de dígitos fraccionarios en el campo de segundos. |
6 | LOCALTIME Entrega valores sin zona horaria. |
7 | LOCALTIMESTAMP Entrega valores sin zona horaria. |
8 | LOCALTIME(precision) Opcionalmente, toma un parámetro de precisión, lo que hace que el resultado se redondee a esa cantidad de dígitos fraccionarios en el campo de segundos. |
9 | LOCALTIMESTAMP(precision) Opcionalmente, toma un parámetro de precisión, lo que hace que el resultado se redondee a esa cantidad de dígitos fraccionarios en el campo de segundos. |
Ejemplos que utilizan las funciones de la tabla anterior:
testdb=# SELECT CURRENT_TIME;
timetz
--------------------
08:01:34.656+05:30
(1 row)
testdb=# SELECT CURRENT_DATE;
date
------------
2013-05-05
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP;
now
-------------------------------
2013-05-05 08:01:45.375+05:30
(1 row)
testdb=# SELECT CURRENT_TIMESTAMP(2);
timestamptz
------------------------------
2013-05-05 08:01:50.89+05:30
(1 row)
testdb=# SELECT LOCALTIMESTAMP;
timestamp
------------------------
2013-05-05 08:01:55.75
(1 row)
PostgreSQL también proporciona funciones que devuelven la hora de inicio de la declaración actual, así como la hora actual actual en el instante en que se llama a la función. Estas funciones son:
S. No. | Función descriptiva |
---|---|
1 | transaction_timestamp() Es equivalente a CURRENT_TIMESTAMP, pero su nombre refleja claramente lo que devuelve. |
2 | statement_timestamp() Devuelve la hora de inicio de la declaración actual. |
3 | clock_timestamp() Devuelve la hora actual real y, por lo tanto, su valor cambia incluso dentro de un solo comando SQL. |
4 | timeofday() Devuelve la hora actual real, pero como una cadena de texto formateada en lugar de una marca de tiempo con el valor de la zona horaria. |
5 | now() Es un tradicional PostgreSQL equivalente a transaction_timestamp (). |
DATE_PART (texto, marca de tiempo), DATE_PART (texto, intervalo), DATE_TRUNC (texto, marca de tiempo)
S. No. | Función descriptiva |
---|---|
1 | DATE_PART('field', source) Estas funciones obtienen los subcampos. El parámetro de campo debe ser un valor de cadena, no un nombre. Los nombres de campo válidos son: siglo, día, década, dow, doy, época, hora, isodow, isoyear, microsegundos, milenio, milisegundos, minuto, mes, cuarto, segundo, zona horaria, timezone_hour, timezone_minute, semana, año. |
2 | DATE_TRUNC('field', source) Esta función es conceptualmente similar a la función trunc para números. fuente es una expresión de valor de tipo marca de tiempo o intervalo. campo selecciona con qué precisión truncar el valor de entrada. El valor de retorno es de tipo marca de tiempo o intervalo . Los valores válidos para el campo son: microsegundos, milisegundos, segundo, minuto, hora, día, semana, mes, trimestre, año, década, siglo, milenio |
Los siguientes son ejemplos de funciones DATE_PART ( 'campo' , fuente):
testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
Los siguientes son ejemplos de funciones DATE_TRUNC ( 'campo' , fuente):
testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-02-16 20:00:00
(1 row)
testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
date_trunc
---------------------
2001-01-01 00:00:00
(1 row)
EXTRACT (campo de la marca de tiempo), EXTRACT (campo del intervalo)
los EXTRACT(field FROM source)La función recupera subcampos como el año o la hora de los valores de fecha / hora. La fuente debe ser una expresión de valor de tipo marca de tiempo, hora o intervalo . El campo es un identificador o cadena que selecciona qué campo extraer del valor de origen. La función EXTRACCIÓN devuelve valores de tipo precisión doble .
Los siguientes son nombres de campo válidos (similares a los nombres de campo de la función DATE_PART): siglo, día, década, dow, doy, época, hora, isodow, isoyear, microsegundos, milenio, milisegundos, minuto, mes, cuarto, segundo, zona horaria, zona horaria_hora , timezone_minute, semana, año.
Los siguientes son ejemplos de funciones EXTRACT ( 'campo' , fuente):
testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
date_part
-----------
20
(1 row)
testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
ISFINITE (fecha), ISFINITE (marca de tiempo), ISFINITE (intervalo)
S. No. | Función descriptiva |
---|---|
1 | ISFINITE(date) Pruebas de fecha finita. |
2 | ISFINITE(timestamp) Pruebas de sello de tiempo finito. |
3 | ISFINITE(interval) Pruebas de intervalo finito. |
Los siguientes son ejemplos de las funciones ISFINITE ():
testdb=# SELECT isfinite(date '2001-02-16');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
isfinite
----------
t
(1 row)
testdb=# SELECT isfinite(interval '4 hours');
isfinite
----------
t
(1 row)
JUSTIFY_DAYS (intervalo), JUSTIFY_HOURS (intervalo), JUSTIFY_INTERVAL (intervalo)
S. No. | Función descriptiva |
---|---|
1 | JUSTIFY_DAYS(interval) Ajusta el intervalo para que los períodos de 30 días se representen como meses. Devuelve elinterval tipo |
2 | JUSTIFY_HOURS(interval) Ajusta el intervalo para que los períodos de 24 horas se representen como días. Devuelve elinterval tipo |
3 | JUSTIFY_INTERVAL(interval) Ajusta el intervalo usando JUSTIFY_DAYS y JUSTIFY_HOURS, con ajustes de señal adicionales. Devuelve elinterval tipo |
Los siguientes son ejemplos de las funciones ISFINITE ():
testdb=# SELECT justify_days(interval '35 days');
justify_days
--------------
1 mon 5 days
(1 row)
testdb=# SELECT justify_hours(interval '27 hours');
justify_hours
----------------
1 day 03:00:00
(1 row)
testdb=# SELECT justify_interval(interval '1 mon -1 hour');
justify_interval
------------------
29 days 23:00:00
(1 row)