PostgreSQL giver os flere måder at få dagen, måneden og året fra en dato på.
Tre funktioner, der umiddelbart kommer til at tænke på er; DATE_PART()
, EXTRACT()
, og TO_CHAR()
.
EXTRACT()
EXTRACT()
funktion henter underfelter såsom år, måned, time eller minut, en del fra en dato/tidsværdi.
Eksempel:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Resultat:
2035
Vi kan returnere forskellige datodele i separate felter ved at foretage tre separate kald til denne funktion:
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";
Resultat:
Her returnerede jeg månedsdagen, ugedagen, årets dag, måneden og året fra datoen.
Se Hvordan Extract() virker i PostgreSQL for flere eksempler og en liste over feltnavne, der kan returneres af denne funktion.
DATE_PART()
DATE_PART()
funktion svarer til EXTRACT()
, men med en lidt anden syntaks.
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";
Resultat:
Denne funktion kræver, at det første argument angives som en streng, og et komma adskiller de to argumenter i stedet for FROM
søgeord.
TO_CHAR()
TO_CHAR()
Funktionen er mere fleksibel, idet den kan bruges til at give et bredere udvalg af output. For eksempel kan vi bruge denne funktion til at returnere dag, måned og år i ét felt:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Resultat:
Lørdag den 2. december 2045
Vi kan bruge fm
skabelonmodifikator for at undertrykke enhver udfyldning, der kan anvendes:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Resultat:
Mandag den 1. april 2165
Bemærk også, at den th
skabelonmodifikator er smart nok til at vide, om st
, nd
, rd
eller th
skal tilføjes.
Her er et eksempel, der bruger forskellige kald til TO_CHAR()
at udskrive forskellige datodele i separate felter:
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";
Resultat: