PostgreSQL ci fornisce diversi modi per ottenere il giorno, il mese e l'anno da una data.
Tre funzioni che vengono immediatamente in mente sono; DATE_PART()
, EXTRACT()
e TO_CHAR()
.
EXTRACT()
Il EXTRACT()
la funzione recupera i sottocampi come l'anno, il mese, l'ora o il minuto, parte da un valore di data/ora.
Esempio:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Risultato:
2035
Possiamo restituire parti di date diverse in campi separati effettuando tre chiamate separate a questa funzione:
SELECT
EXTRACT(DAY FROM date '2035-10-30') AS "Day",
EXTRACT(DOW FROM date '2035-10-30') AS "DOW",
EXTRACT(DOY FROM date '2035-10-30') AS "DOY",
EXTRACT(MONTH FROM date '2035-10-30') AS "Month",
EXTRACT(YEAR FROM date '2035-10-30') AS "Year";
Risultato:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Qui ho restituito il giorno del mese, il giorno della settimana, il giorno dell'anno, il mese e l'anno dalla data.
Vedi come funziona Extract() in PostgreSQL per ulteriori esempi e un elenco di nomi di campo che possono essere restituiti da questa funzione.
DATE_PART()
Il DATE_PART()
la funzione è l'equivalente di EXTRACT()
, ma con una sintassi leggermente diversa.
SELECT
DATE_PART('DAY', date '2035-10-30') AS "Day",
DATE_PART('DOW', date '2035-10-30') AS "DOW",
DATE_PART('DOY', date '2035-10-30') AS "DOY",
DATE_PART('MONTH', date '2035-10-30') AS "Month",
DATE_PART('YEAR', date '2035-10-30') AS "Year";
Risultato:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Questa funzione richiede che il primo argomento sia fornito come stringa e una virgola separi i due argomenti invece di FROM
parola chiave.
TO_CHAR()
Il TO_CHAR()
funzione è più flessibile, in quanto può essere utilizzata per fornire una più ampia varietà di output. Ad esempio, possiamo utilizzare questa funzione per restituire il giorno, il mese e l'anno in un unico campo:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Risultato:
Saturday , 02nd December 2045
Possiamo usare il fm
modificatore del modello per eliminare qualsiasi riempimento che può essere applicato:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Risultato:
Monday, 1st April 2165
Nota anche che il th
il modificatore di modello è abbastanza intelligente da sapere se st
, nd
, rd
o th
dovrebbe essere aggiunto.
Ecco un esempio che utilizza varie chiamate a TO_CHAR()
per produrre varie parti della data in campi separati:
SELECT
TO_CHAR(date '2165-04-01', 'fmDay') AS "Day",
TO_CHAR(date '2165-04-01', 'fmDD') AS "DD",
TO_CHAR(date '2165-04-01', 'fmMonth') AS "Month",
TO_CHAR(date '2165-04-01', 'YYYY') AS "YYYY";
Risultato:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165