Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Explorando os formatos de data do Postgres e suas diferentes funções




Neste artigo, exploraremos as datas do Postgres, os diferentes tipos de dados de data, usos e funções.

Os carimbos de data e hora são úteis para análise de dados e armazenamento de dados para verificar quando um evento realmente ocorreu. Por exemplo, quando você tem pedidos de compra e venda, ganhos mensais ou trimestrais e muito mais. Os formatos de data variam entre os países, portanto, pode ser uma tarefa complicada para quem não conhece o gerenciamento de banco de dados e trabalha com colunas de data. O formato ou tipo de dados da coluna de data deve sempre corresponder à entrada do usuário. Além disso, você deve converter a exibição do formato de data de acordo com os requisitos do usuário.

O Postgres tem uma variedade de tipos de dados suportados. Antes de prosseguir, sugiro que você consulte Explorando os vários tipos de dados do Postgres para entendê-los com mais detalhes.

Tipo de dados Postgres DATE


O Postgres usa o tipo de dados DATE para armazenar datas diferentes no formato AAAA-MM-DD. Ele usa 4 bytes para armazenar um valor de data em uma coluna.
  • Data mais baixa:4713 aC
  • Data mais alta:5874897 aC
  • Formato de data:AAAA-MM-DD (Ex. 2021-01-01)

Você pode criar uma tabela Postgres com uma coluna DATE e usar a palavra-chave DEFAULT CURRENT_DATE  para usar a data atual do sistema como o valor padrão nesta coluna.
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;

Conforme mostrado abaixo, o SQL insere um valor para a coluna [OrderDate] automaticamente com a data atual do sistema no formato AAAA-MM-DD.


Funções Postgres DATE


Muitas vezes precisamos modificar o formato da data ou fazer cálculos em valores existentes armazenados na tabela Postgres. Por exemplo, na Índia, o formato de data usual é DD-MM-AAAA. Portanto, quando um usuário indiano visualiza os dados, provavelmente queremos que ele visualize os dados no formato com o qual está mais familiarizado. Nesse caso, o SQL Functions desempenha um papel vital.

função TO_CHAR()


Esta função é útil para fornecer a saída de um valor de data Postgres em um formato especificado. Ele aceita os dois parâmetros a seguir.
  • Data de entrada:esta é a data que você deseja converter em um formato específico.
  • Formato de data:é aqui que você especifica o novo formato de data.

A consulta a seguir converte os valores de data existentes armazenados na tabela [SalesOrders] no formato DD-MM-AAAA.
SELECT Orderdetails,OrderDate as ExistingDateformat,
to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;



Os valores suportados na função to_char() são mostrados abaixo.
AAAA Ano em quatro dígitos
AAAA Últimos três dígitos de um ano
AA Últimos dois dígitos de um ano
MÊS Nome do mês em letras maiúsculas
Mês Nome do mês com a primeira letra maiúscula
mês Nome do mês em letras minúsculas
SEG/Seg/Seg Abreviação do mês em letras maiúsculas, primeira letra maiúscula e todas as letras minúsculas, respectivamente
MM Número do mês (01-12)
DIA/Dia/dia Nome do dia em letras maiúsculas, primeira letra maiúscula e todas as letras minúsculas, respectivamente
DDD Dia do ano (001 a 366)
DD Dia do mês (01 a 31)
D Dia da semana (domingo (1) a sábado (7))
L Semana do mês
WW Semana do ano

Alguns exemplos de formatos de data diferentes são especificados no SQL a seguir.
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


função Now()


A função Now() retorna o timestamp atual do sistema (data e hora).



Você pode especificar dois pontos duplos (::) para converter um valor DATETIME em um valor DATE.



Você pode combinar TO_CHAR() e a função Now() para converter o timestamp atual no formato especificado.
SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');


Operador de menos e intervalo


Você pode usar o operador menos (-) para calcular a diferença entre duas datas. Por exemplo, a consulta abaixo retorna o intervalo entre o timestamp atual e [Orderdate] da tabela SalesOrders.
SELECT Orderdate,now() as currentdate,
now()-Orderdate as Interval FROM SalesOrders
where order_id=2;



Você também pode especificar um intervalo para retornar a data após um período especificado. Por exemplo, a consulta SQL abaixo fornece os seguintes valores.
  • Para data futura, especifique o valor do intervalo 2 horas a partir do carimbo de data/hora atual: now() + intervalo '2 horas'
  • Para data futura, especifique o valor do intervalo de 1 dia a partir do carimbo de data/hora atual: now() + intervalo '1 dia'
  • Para datas anteriores, especifique o valor do intervalo um ano a partir do carimbo de data/hora atual: Now() – intervalo "1 ano"
  • Calcule um ano após a data a partir do valor armazenado na coluna [Orderdate]: orderdate – intervalo '1 ano'
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;


função AGE()


A função AGE() retorna a diferença de data em anos, meses e dias. Você pode usar esta função para calcular a idade de uma pessoa.

Esta função aceita dois parâmetros de data e subtrai o primeiro valor de data do segundo.



Se você reverter os valores no script de função acima, ele retornará o valor negativo.



Em outro exemplo, digamos que alguém tenha uma data de nascimento de 1990-07-01. Portanto, a idade de uma pessoa pode ser calculada como abaixo.
SELECT current_date,
AGE(timestamp '1990-07-01') as EmpAge;


função EXTRACT()


A função Extract() retorna o dia, semana, mês, ano e trimestre do valor de data especificado.

Extrair um ano
SELECT EXTRACT(YEAR FROM TIMESTAMP '2021-06-28 10:30:15') as year;



Extrair um mês
SELECT EXTRACT(Month FROM TIMESTAMP '2021-06-28 10:30:15') as Month;



Extrair um quarto
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2021-06-28 10:30:15') as QUARTER;



Extrair o dia da semana
SELECT EXTRACT(DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW ;



Extrair o dia do ano
SELECT EXTRACT(DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY ;



Você também pode usar a função EXTRACT() em combinação com um INTERVAL. Por exemplo, abaixo especificamos o intervalo como 7 anos 9 meses 20 dias 09 horas 12 minutos e 13 segundos. A função de extração retorna os valores individuais.
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' );
;


NO FUSO HORÁRIO


Às vezes, você precisa converter o carimbo de data/hora em um fuso horário diferente. Por exemplo, você pode armazenar valores de data em UTC (coordenador de horário universal) e converter o fuso horário conforme necessário.
SELECT * FROM pg_timezone_names;



Para verificar o fuso horário atual, use SHOW TIMEZONE conforme mostrado abaixo.



Você pode escolher o valor de fuso horário necessário em pg_timezone_names e usar AT TIME ZONE para obter a saída de acordo com o fuso horário especificado.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/Chicago';



Da mesma forma, podemos obter saídas de fuso horário diferentes 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';


Resumo


Os tipos de data Postgres são essenciais e valiosos ao armazenar datas e carimbos de data/hora em quase todas as tabelas de um banco de dados relacional. Você precisa deles para várias finalidades, como inserção de pedidos ou ao atualizar timestamp, pedidos de compra e venda, detalhes de eventos, informações de clientes e funcionários e muito mais. Você pode usar várias funções do Postgres para converter um tipo de data para o fuso horário necessário, formato e informações específicas para simplificar a extração e análise de seus dados.