PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Lavorare con le date in PostgreSQL


Introduzione

La possibilità di memorizzare i valori di data all'interno del tuo database ti consente di aggiungere un elemento temporale alle tue query e all'analisi dei tuoi dati. È importante sapere come lavorare con i tipi di data nel rispettivo database in modo da poter essere precisi nei rapporti che si tratti di informazioni sugli ordini, età delle persone o qualsiasi altro caso d'uso.

In questa guida parleremo della memorizzazione di DATE tipi in PostgreSQL e i vari modi in cui puoi lavorarci.



PostgreSQL DATE tipo di dati

Il DATE digitare PostgreSQL può memorizzare una data senza un valore di tempo associato:

DATE

PostgreSQL utilizza 4 byte per memorizzare un valore di data. L'intervallo di valori per i valori di data in PostgreSQL è compreso tra 4713 BC e 5874897 AD.

Quando si memorizza un valore di data, PostgreSQL utilizza il yyyy-mm-dd formato ad es. 1994-10-27. Questo formato viene utilizzato anche in PostgreSQL per l'inserimento di dati.

In PostgreSQL, è possibile impostare un valore di data predefinito per la data corrente. Questo può essere fatto durante la creazione della tabella utilizzando il DEFAULT e CURRENT_DATE parole chiave. Il last_checkout la colonna della nostra tabella di checkout della libreria accetta la data corrente per impostazione predefinita:

CREATE TABLE checkouts (        author_id serial PRIMARY KEY,        author_name VARCHAR (255) NOT NULL,        book_title VARCHAR (255) NOT NULL,        published_date DATE NOT NULL,          last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);

Seguendo questa struttura di tabella, possiamo inserire i dati con il INSERT INTO dichiarazione:

INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');

Quindi durante la query sui checkouts tabella, otteniamo quanto segue:

SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+---------------         1 | James Joyce |   Ulysses  |   1922-02-02   |  2021-09-27(1 row)


PostgreSQL DATE funzioni

Conoscendo i dettagli della DATE digita PostgreSQL, sarai quindi in grado di utilizzare le funzioni che lavorano con le informazioni che memorizzi. Esamineremo alcune funzioni comuni basate sulla tabella introdotta nella sezione precedente.


Ottieni la data corrente

In PostgreSQL, puoi ottenere la data e l'ora correnti usando il built-in NOW() funzione. La seguente dichiarazione restituirà sia il giorno che l'ora:

SELECT NOW();              now              ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)

Se l'ora non è di interesse, puoi anche specificare di restituire la data solo con i due due punti :: per trasmettere un DATETIME valore al DATE valore:

SELECT NOW()::date;    now     ------------ 2021-09-27(1 row)

Usando CURRENT_DATE è un altro modo per ottenere la data corrente come mostrato di seguito:

SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)

Tutte e tre queste opzioni ti restituiranno la data nel yyyy-mm-dd formato. All'interno di PostgreSQL, puoi modificare il formato di questo output, se lo desideri.



Emetti un valore di data in un formato specifico

Per generare un valore di data in un formato specifico, usi TO_CHAR() funzione. Questa funzione accetta due parametri:

  1. il valore che vuoi formattare
  2. il modello che definisce il formato di output
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy');  to_char   ------------ 27/09/2021(1 row)

Puoi anche visualizzare la data in un formato come Sep 27, 2021 :

SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy');   to_char    -------------- Sep 27, 2021(1 row)

A seconda dei requisiti di un sistema, potrebbe essere necessaria una data formattata in un modo specifico. Questo è uno scenario in cui è utile poter specificare l'output in PostgreSQL.



Ottieni l'intervallo tra due date

PostgreSQL ti permette di ottenere l'intervallo tra due date usando il - operatore. L'utilizzo di questo operatore ti consente di calcolare cose come la permanenza in carica di un dipendente o il tempo trascorso dalla pubblicazione di un libro.

Nel nostro esempio vogliamo trovare quanti giorni sono trascorsi dall'Ulisse di Joyce è stato pubblicato sottraendo la data corrente dalla published_date :

SELECT                author_name,                book_title,                now()::date - published_date as diffFROM                checkouts;

Risultato:

 author_name | book_title |            diff            -------------+------------+---------------------------- James Joyce |  Ulysses   |         36397 days (1 row)


Calcolo dell'età utilizzando i valori della data

Possiamo continuare con lo stesso esempio per calcolare l'età alla data corrente in anni, mesi e giorni usando AGE() funzione. La seguente istruzione usa AGE() funzione per calcolare l'età di una pubblicazione dalla nostra libreria checkouts tabelle:

SELECT                author_name,                book_title,                AGE(published_date)FROM                checkouts;

Con questa funzione possiamo calcolare quanti anni ha un libro in inventario:

 author_name | book_title |           age           -------------+------------+------------------------- James Joyce |  Ulysses   | 99 years 7 mons 25 days(1 row)

È importante notare che se si passa una singola data in AGE() funzione, quindi utilizzerà automaticamente la data corrente per sottrarre e calcolare. Puoi anche passare due date nella funzione per calcolare l'età come:

SELECT                author_name,                book_title,                AGE('2000-01-01',published_date),FROM                checkouts;

Risultato:

 author_name | book_title |           age            -------------+------------+-------------------------- James Joyce |  Ulysses   | 77 years 10 mons 27 days(1 row)


Estrazione di anno, trimestre, mese, settimana o giorno da un valore di data

L'ultima funzione che tratteremo è EXTRACT() funzione in PostgreSQL che ti consente di separare i componenti della data come anno, trimestre, mese e giorno.

La seguente dichiarazione estrae l'anno, il mese e il giorno dalla data di pubblicazione di Ulisse :

SELECT             author_name,             book_title,             EXTRACT(YEAR FROM published_date) AS YEAR,            EXTRACT(MONTH FROM published_date) AS MONTH,             EXTRACT(DAY FROM published_date) AS DAY FROM             checkouts;

I risultati saranno simili ai seguenti:

 author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce |  Ulysses   | 1922 |   2   |  2(1 row)

Questa è una funzione utile da tenere presente quando potresti aver bisogno solo di una parte di un valore di data per un calcolo con i tuoi dati, ad esempio.




Conclusione

In questa guida, abbiamo trattato le basi di ciò che puoi fare con DATE tipo di dati in PostgreSQL. È importante sapere come funzionano i dati sulla data all'interno del database. Avere una conoscenza dei modi in cui è possibile accedervi e operare su di esso consente di eseguire calcoli sull'età, eseguire estrazioni nelle query e anche configurare l'output, se necessario, per soddisfare i requisiti di un altro sistema.