sql >> Base de Datos >  >> RDS >> Sqlserver

Explorando los formatos de fecha de Postgres y sus diferentes funciones

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.