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.