En este artículo, exploraremos las fechas de Postgres, los diferentes tipos de datos de fecha, usos y funciones.
Las marcas de fecha y hora son útiles para el análisis de datos y el almacenamiento de datos para verificar cuándo tuvo lugar realmente un evento. Por ejemplo, cuando tiene órdenes de compra y venta, ganancias mensuales o trimestrales y más. Los formatos de fecha varían según los países, por lo que puede ser una tarea complicada para aquellos que son nuevos en la administración de bases de datos y trabajan con columnas de fecha. El formato o tipo de datos de la columna de fecha siempre debe coincidir con la entrada del usuario. Además, debe convertir la visualización del formato de fecha según los requisitos de su usuario.
Postgres tiene una variedad de tipos de datos compatibles. Antes de continuar, le sugiero que consulte Explorando los diversos tipos de datos de Postgres para comprenderlos con más detalle.
Tipo de datos DATE de Postgres
Postgres usa el tipo de datos DATE para almacenar diferentes fechas en formato AAAA-MM-DD. Utiliza 4 bytes para almacenar un valor de fecha en una columna.
- Fecha más baja:4713 a. C.
- Fecha máxima:5874897 a. C.
- Formato de fecha:AAAA-MM-DD (Ej. 2021-01-01)
Puede diseñar una tabla de Postgres con una columna FECHA y usar la palabra clave DEFAULT FECHA_ACTUAL para usar la fecha actual del sistema como valor predeterminado en esta columna.
CREATE TABLE SalesOrders ( Order_id serial PRIMARY KEY, Orderdetails VARCHAR (255) NOT NULL, OrderDate DATE NOT NULL DEFAULT CURRENT_DATE ); INSERT INTO SalesOrders (Orderdetails) VALUES('Sample Order for customer ABC'); SELECT * FROM SalesOrders;
Como se muestra a continuación, el SQL inserta un valor para la columna [FechaPedido] automáticamente con la fecha actual del sistema en el formato AAAA-MM-DD.
Funciones de FECHA de Postgres
A menudo necesitamos modificar el formato de fecha o hacer cálculos sobre valores existentes almacenados en la tabla de Postgres. Por ejemplo, en India, el formato de fecha habitual es DD-MM-YYYY. Por lo tanto, cuando un usuario indio ve los datos, probablemente querremos que los vea en el formato con el que está más familiarizado. En este caso, las funciones SQL juegan un papel vital.
Función TO_CHAR()
Esta función es útil para dar la salida de un valor de fecha de Postgres en un formato específico. Acepta los siguientes dos parámetros.
- Ingresar fecha:esta es la fecha que desea convertir a un formato específico.
- Formato de fecha:aquí es donde especifica el nuevo formato de fecha.
La siguiente consulta convierte los valores de fecha existentes almacenados en la tabla [SalesOrders] al formato DD-MM-YYYY.
SELECT Orderdetails,OrderDate as ExistingDateformat, to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;
Los valores admitidos en la función to_char() se muestran a continuación.
YYYY | Año en cuatro dígitos |
AAAA | Últimos tres dígitos de un año |
AA | Últimos dos dígitos de un año |
MES | Nombre del mes en mayúsculas |
Mes | Nombre del mes con la primera letra en mayúscula |
mes | Nombre del mes en minúsculas |
LUN/Lun/Lun | Abreviatura del mes en mayúsculas, primera letra en mayúsculas y minúsculas, respectivamente |
MM | Número de mes (01-12) |
DÍA/Día/día | Nombre del día en mayúsculas, primera letra en mayúsculas y minúsculas, respectivamente |
DDD | Día del año (001 a 366) |
DD | Día del mes (01 a 31) |
D | Día de la semana (domingo (1) a sábado (7)) |
W | Semana del mes |
WW | Semana del año |
En el siguiente SQL se especifican algunos ejemplos de diferentes formatos de fecha.
SELECT Orderdetails,OrderDate as ExistingDateformat, to_char(OrderDate,'DD-MM-YYYY') As DDMMYYYY, to_char(OrderDate,'DD-MM-YY') As DDMMYY, to_char(OrderDate,'DD.MM.YY') As "DD.MM.YY", to_char(OrderDate,'MM/DD/YYYY') As "MM/DD/YYYY", to_char(OrderDate,'DAY MM/DD/YYYY') As "MM/DD/YYYY", to_char(OrderDate,'DDD MM/DD/YYYY') As "DDD MM/DD/YYYY" FROM SalesOrders
Función Now()
La función Now() devuelve la marca de tiempo actual del sistema (fecha y hora).
Puede especificar dos puntos dobles (::) para convertir un valor DATETIME en un valor DATE.
Puede combinar TO_CHAR() y la función Now() para convertir la marca de tiempo actual al formato especificado.
SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');
Operador menos e intervalo
Puede utilizar el operador menos (-) para calcular la diferencia entre dos fechas. Por ejemplo, la consulta a continuación devuelve el intervalo entre la marca de tiempo actual y [Fecha del pedido] de la tabla Pedidos de ventas.
SELECT Orderdate,now() as currentdate, now()-Orderdate as Interval FROM SalesOrders where order_id=2;
También puede especificar un intervalo para devolver la fecha después de un período específico. Por ejemplo, la siguiente consulta SQL da los siguientes valores.
- Para una fecha futura, especifique el valor del intervalo 2 horas a partir de la marca de tiempo actual: ahora() + intervalo '2 horas'
- Para una fecha futura, especifique el valor del intervalo de 1 día a partir de la marca de tiempo actual: ahora() + intervalo '1 día'
- Para una fecha anterior, especifique el valor del intervalo un año a partir de la marca de tiempo actual: Ahora():intervalo '1 año'
- Calcule un año después de la fecha a partir del valor almacenado en la columna [Fecha del pedido]: fecha del pedido:intervalo '1 año'
SELECT (NOW() + interval '2 hour') AS twohourslater, (NOW() + interval '1 day') AS Onedaylater, (NOW() - interval '1 year') AS OneYearBefore, (Orderdate- interval '1 year') as Orderdatedifference from salesorders;
Función EDAD()
La función AGE() devuelve la diferencia de fechas en años, meses y días. Puede utilizar esta función para calcular la edad de una persona.
Esta función acepta dos parámetros de fecha y resta el primer valor de fecha del segundo.
Si invierte los valores en el script de función anterior, devuelve el valor en negativo.
En otro ejemplo, digamos que alguien tiene una fecha de nacimiento de 1990-07-01. Por lo tanto, la edad de una persona se puede calcular de la siguiente manera.
SELECT current_date, AGE(timestamp '1990-07-01') as EmpAge;
Función EXTRAER()
La función Extract() devuelve el día, la semana, el mes, el año y el trimestre a partir del valor de fecha especificado.
Extraer un año
SELECT EXTRACT(YEAR FROM TIMESTAMP '2021-06-28 10:30:15') as year;
Extraer un mes
SELECT EXTRACT(Month FROM TIMESTAMP '2021-06-28 10:30:15') as Month;
Extraer una moneda
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2021-06-28 10:30:15') as QUARTER;
Extracción del día de la semana
SELECT EXTRACT(DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW ;
Extracción del día del año
SELECT EXTRACT(DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY ;
También puede usar la función EXTRAER() en combinación con un INTERVALO. Por ejemplo, a continuación especificamos el intervalo como 7 años 9 meses 20 días 09 horas 12 minutos y 13 segundos. La función de extracción devuelve los valores individuales.
SELECT EXTRACT(YEAR FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ), EXTRACT(Month FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ), EXTRACT(Day FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ), EXTRACT(hour FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ), EXTRACT(Minute FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ); ;
EN LA ZONA HORARIA
A veces, necesita convertir la marca de tiempo en una zona horaria diferente. Por ejemplo, puede almacenar valores de fecha en UTC (coordinador de hora universal) y convertir la zona horaria según sea necesario.
SELECT * FROM pg_timezone_names;
Para verificar la zona horaria actual, use MOSTRAR ZONA HORARIA como se muestra a continuación.
Puede elegir el valor de zona horaria requerido de pg_timezone_names y usar AT TIME ZONE para obtener la salida según la zona horaria especificada.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/Chicago';
Del mismo modo, podemos obtener diferentes salidas de zona horaria usando AT TIME ZONE.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/New_York';
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Asia/Qatar';
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Europe/Istanbul';
Resumen
Los tipos de fecha de Postgres son esenciales y valiosos cuando se almacenan fechas y marcas de tiempo en casi todas las tablas de una base de datos relacional. Los necesita para diversos fines, como la inserción de pedidos o al actualizar la marca de tiempo, pedidos de compra y venta, detalles de eventos, información de clientes y empleados y más. Puede utilizar varias funciones de Postgres para convertir un tipo de fecha a la zona horaria, el formato y la información específica necesarios para simplificar la extracción y el análisis de sus datos.