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)