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

Trabajando con fechas en PostgreSQL


Introducción

La capacidad de almacenar valores de fecha dentro de su base de datos le permite agregar un elemento de tiempo a sus consultas y análisis de sus datos. Es importante saber cómo trabajar con tipos de fecha en su base de datos respectiva para que pueda ser preciso en sus informes, ya sea información de pedidos, edades de personas o cualquier otro caso de uso.

En esta guía, vamos a discutir el almacenamiento de DATE tipos en PostgreSQL y las diversas formas en que puede trabajar con ellos.



PostgreSQL DATE tipo de datos

La DATE type en PostgreSQL puede almacenar una fecha sin un valor de tiempo asociado:

DATE

PostgreSQL usa 4 bytes para almacenar un valor de fecha. El rango de valores para los valores de fecha en PostgreSQL es 4713 aC a 5874897 dC.

Al almacenar un valor de fecha, PostgreSQL usa el yyyy-mm-dd formato ej. 1994-10-27. Este formato también se usa en PostgreSQL para insertar datos.

En PostgreSQL, es posible establecer un valor de fecha predeterminado de la fecha actual. Esto se puede hacer al crear su tabla usando el DEFAULT y CURRENT_DATE palabras clave El last_checkout columna de nuestra tabla de préstamo de la biblioteca acepta la fecha actual por defecto:

CREATE TABLE checkouts (        author_id serial PRIMARY KEY,        author_name VARCHAR (255) NOT NULL,        book_title VARCHAR (255) NOT NULL,        published_date DATE NOT NULL,          last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);

Siguiendo esta estructura de tabla, podemos insertar datos con el INSERT INTO declaración:

INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');

Luego, al consultar los checkouts tabla, obtenemos lo siguiente:

SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+---------------         1 | James Joyce |   Ulysses  |   1922-02-02   |  2021-09-27(1 row)


PostgreSQL DATE funciones

Conociendo los entresijos del DATE escribe PostgreSQL, entonces puedes usar funciones que trabajan con la información que almacenas. Veremos algunas funciones comunes que se basan en la tabla presentada en la sección anterior.


Obtener la fecha actual

En PostgreSQL, puede obtener la fecha y la hora actuales utilizando el NOW() integrado. función. La siguiente declaración devolverá tanto el día como la hora:

SELECT NOW();              now              ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)

Si la hora no es de su interés, también puede especificar que solo devuelva la fecha con dos puntos :: para emitir un DATETIME valor a la DATE valor:

SELECT NOW()::date;    now     ------------ 2021-09-27(1 row)

Usando CURRENT_DATE es otra forma de obtener la fecha actual como se muestra a continuación:

SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)

Estas tres opciones le devolverán la fecha en el yyyy-mm-dd formato. Dentro de PostgreSQL, puede ajustar el formato de esta salida si lo desea.



Generar un valor de fecha en un formato específico

Para generar un valor de fecha en un formato específico, utilice TO_CHAR() función. Esta función acepta dos parámetros:

  1. el valor que desea formatear
  2. la plantilla que define el formato de salida
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy');  to_char   ------------ 27/09/2021(1 row)

También puede mostrar la fecha en un formato como Sep 27, 2021 :

SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy');   to_char    -------------- Sep 27, 2021(1 row)

Según los requisitos de un sistema, es posible que necesite un formato de fecha específico. Este es un escenario en el que es útil poder especificar la salida en PostgreSQL.



Obtener el intervalo entre dos fechas

PostgreSQL le permite obtener el intervalo entre dos fechas usando el - operador. El uso de este operador le permite calcular cosas como la antigüedad de un empleado o el tiempo transcurrido desde la publicación de un libro.

En nuestro ejemplo, queremos saber cuántos días han pasado desde el Ulysses de Joyce. se publicó restando la fecha actual de la published_date :

SELECT                author_name,                book_title,                now()::date - published_date as diffFROM                checkouts;

Resultando en:

 author_name | book_title |            diff            -------------+------------+---------------------------- James Joyce |  Ulysses   |         36397 days (1 row)


Calcular la edad usando valores de fecha

Podemos continuar con el mismo ejemplo para calcular la edad en la fecha actual en años, meses y días usando el AGE() función. La siguiente declaración usa el AGE() función para calcular la antigüedad de una publicación de nuestra biblioteca checkouts tablas:

SELECT                author_name,                book_title,                AGE(published_date)FROM                checkouts;

Con esta función podemos calcular la antigüedad de un libro en inventario:

 author_name | book_title |           age           -------------+------------+------------------------- James Joyce |  Ulysses   | 99 years 7 mons 25 days(1 row)

Es importante tener en cuenta que si pasa una sola fecha a AGE() función, luego usará automáticamente la fecha actual para restar y calcular. También puede pasar dos fechas a la función para calcular la edad, como:

SELECT                author_name,                book_title,                AGE('2000-01-01',published_date),FROM                checkouts;

Resultando en:

 author_name | book_title |           age            -------------+------------+-------------------------- James Joyce |  Ulysses   | 77 years 10 mons 27 days(1 row)


Extraer año, trimestre, mes, semana o día de un valor de fecha

La última función que vamos a cubrir es EXTRACT() función en PostgreSQL que le permite separar los componentes de la fecha como el año, el trimestre, el mes y el día.

La siguiente declaración extrae el año, el mes y el día a partir de la fecha de publicación de Ulysses :

SELECT             author_name,             book_title,             EXTRACT(YEAR FROM published_date) AS YEAR,            EXTRACT(MONTH FROM published_date) AS MONTH,             EXTRACT(DAY FROM published_date) AS DAY FROM             checkouts;

Los resultados serán similares a los siguientes:

 author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce |  Ulysses   | 1922 |   2   |  2(1 row)

Esta es una función útil para tener en cuenta cuando, por ejemplo, solo necesite una parte de un valor de fecha para un cálculo con sus datos.




Conclusión

En esta guía, cubrimos los conceptos básicos de lo que puede hacer con DATE tipo de datos en PostgreSQL. Es importante saber cómo funcionan los datos de fecha dentro de su base de datos. Tener una idea de las formas en que puede acceder a él y operar en él le permite realizar cálculos de edad, ejecutar extracciones en sus consultas y también configurar su salida si es necesario para que coincida con los requisitos de otro sistema.