Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esplorazione dei formati di data Postgres e delle loro diverse funzioni

In questo articolo esploreremo le date di Postgres, i diversi tipi di dati delle date, gli usi e le funzioni.

Data e timestamp sono utili per l'analisi dei dati e la memorizzazione dei dati per controllare quando si è effettivamente verificato un evento. Ad esempio, quando hai ordini di acquisto e vendita, guadagni mensili o trimestrali e altro ancora. I formati delle date variano da paese a paese, quindi può essere un compito complicato per coloro che non conoscono la gestione del database e lavorano con le colonne della data. Il formato o il tipo di dati della colonna della data deve sempre corrispondere all'input dell'utente. Inoltre, dovresti convertire la visualizzazione del formato della data in base ai requisiti del tuo utente.

Postgres ha una varietà di tipi di dati supportati. Prima di procedere oltre, ti suggerisco di fare riferimento a Esplorazione dei vari tipi di dati Postgres per comprenderli in modo più dettagliato.

Tipo di dati DATE Postgres

Postgres utilizza il tipo di dati DATE per memorizzare date diverse nel formato AAAA-MM-GG. Utilizza 4 byte per memorizzare un valore di data in una colonna.

  • Data più bassa:4713 aC
  • Data massima:5874897 aC
  • Formato data:AAAA-MM-GG ( Es. 01-01-2021)

Puoi progettare una tabella Postgres con una colonna DATE e utilizzare la parola chiave DEFAULT DATA_CORRENTE  per utilizzare la data di sistema corrente come valore predefinito in questa colonna.

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;

Come mostrato di seguito, l'SQL inserisce automaticamente un valore per la colonna [OrderDate] con la data di sistema corrente nel formato AAAA-MM-GG.

Funzioni DATE di Postgres

Spesso abbiamo bisogno di modificare il formato della data o di fare calcoli su valori esistenti memorizzati nella tabella Postgres. Ad esempio, in India, il formato della data abituale è GG-MM-AAAA. Pertanto, quando un utente indiano visualizza i dati, probabilmente vorremo che visualizzi i dati nel formato con cui ha più familiarità. In questo caso, le funzioni SQL svolgono un ruolo fondamentale.

Funzione TO_CHAR()

Questa funzione è utile per fornire l'output di un valore di data Postgres in un formato specifico. Accetta i due parametri seguenti.

  • Data di inserimento:questa è la data che vuoi convertire in un formato specifico.
  • Formato della data:qui è dove specifichi il nuovo formato della data.

La query seguente converte i valori di data esistenti memorizzati nella tabella [Ordini di vendita] nel formato GG-MM-AAAA.

SELECT Orderdetails,OrderDate as ExistingDateformat,
to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;

I valori supportati nella funzione to_char() sono mostrati di seguito.

AAAA Anno in quattro cifre
AAAA Ultime tre cifre di un anno
AA Ultime due cifre di un anno
MESE Nome del mese in lettere maiuscole
Mese Nome del mese con la prima lettera maiuscola
mese Nome del mese in lettere minuscole
LUN/Lun/Lun Abbreviazione del mese in maiuscolo, prima lettera in maiuscolo e tutte lettere minuscole, rispettivamente
MM Numero del mese (01-12)
GIORNO/Giorno/giorno Nome del giorno in maiuscolo, prima lettera in maiuscolo e tutte lettere minuscole, rispettivamente
DDD Giorno dell'anno (da 001 a 366)
DD Giorno del mese (da 01 a 31)
D Giorno della settimana (da domenica (1) a sabato (7))
W Settimana del mese
WW Settimana dell'anno

Alcuni esempi di diversi formati di data sono specificati nel seguente SQL.

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

Funzione Now()

La funzione Now() restituisce il timestamp del sistema corrente (data e ora).

Puoi specificare i due punti doppi (::) per eseguire il cast di un valore DATETIME su un valore DATE.

Puoi combinare TO_CHAR() e la funzione Now() per convertire il timestamp corrente nel formato specificato.

SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');

Operatore meno e intervallo

È possibile utilizzare l'operatore meno (-) per calcolare la differenza tra due date. Ad esempio, la query seguente restituisce l'intervallo tra il timestamp corrente e [Orderdate] dalla tabella SalesOrders.

SELECT Orderdate,now() as currentdate,
now()-Orderdate as Interval FROM SalesOrders
where order_id=2;

È inoltre possibile specificare un intervallo per la restituzione della data dopo un periodo specificato. Ad esempio, la query SQL seguente fornisce i seguenti valori.

  • Per la data futura, specifica il valore dell'intervallo 2 ore dal timestamp corrente: now() + interval '2 hour'
  • Per la data futura, specifica il valore dell'intervallo di 1 giorno dal timestamp corrente: now() + interval '1 day'
  • Per la data passata, specifica il valore dell'intervallo a un anno dal timestamp corrente: Ora() – intervallo '1 anno'
  • Calcola un anno dopo la data dal valore memorizzato nella colonna [Data ordine]: data ordine – intervallo '1 anno'
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;

funzione ETÀ()

La funzione AGE() restituisce la differenza di data in anni, mesi e giorni. Puoi utilizzare questa funzione per calcolare l'età di una persona.

Questa funzione accetta due parametri di data e sottrae il primo valore di data dal secondo.

Se inverti i valori nello script della funzione precedente, restituisce il valore in negativo.

In un altro esempio, supponiamo che qualcuno abbia una data di nascita 1990-07-01. Pertanto, l'età di una persona può essere calcolata come di seguito.

SELECT current_date,
AGE(timestamp '1990-07-01') as EmpAge;

Funzione ESTRAI()

La funzione Extract() restituisce il giorno, la settimana, il mese, l'anno e il trimestre dal valore di data specificato.

Estratto un anno

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

Estrai un mese

SELECT EXTRACT(Month FROM TIMESTAMP '2021-06-28 10:30:15') as Month;

Estrai un trimestre

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

Estrazione del giorno della settimana

SELECT EXTRACT(DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW ;

Estrazione del giorno dell'anno

SELECT EXTRACT(DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY ;

È inoltre possibile utilizzare la funzione EXTRACT() in combinazione con un INTERVAL. Ad esempio, di seguito specifichiamo l'intervallo come 7 anni 9 mesi 20 giorni 09 ore 12 minuti e 13 secondi. La funzione di estrazione restituisce i singoli valori.

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' );
;

AL FUSO ORARIO

A volte, è necessario convertire il timestamp in un fuso orario diverso. Ad esempio, puoi memorizzare i valori della data in UTC (Universal time coordinator) e convertire il fuso orario come richiesto.

SELECT * FROM pg_timezone_names;

Per controllare il fuso orario corrente, usa MOSTRA FUSO ORARIO come mostrato di seguito.

Puoi scegliere il valore del fuso orario richiesto da pg_timezone_names e utilizzare AT TIME ZONE per ottenere l'output per il fuso orario specificato.

SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/Chicago';

Allo stesso modo, possiamo ottenere diversi fusi orari utilizzando 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';

Riepilogo

I tipi di data Postgres sono essenziali e preziosi quando si archiviano data e timestamp in quasi tutte le tabelle di un database relazionale. Ne hai bisogno per vari scopi come l'inserimento di ordini o l'aggiornamento di timestamp, ordini di acquisto e vendita, dettagli di eventi, informazioni su clienti e dipendenti e altro ancora. Puoi utilizzare più funzioni Postgres per convertire un tipo di data nel fuso orario, nel formato e nelle informazioni specifiche richiesti per semplificare l'estrazione e l'analisi dei tuoi dati.