PostgreSQL biedt ons verschillende manieren om de dag, de maand en het jaar uit een datum te halen.
Drie functies die meteen in je opkomen zijn; DATE_PART()
, EXTRACT()
, en TO_CHAR()
.
EXTRACT()
De EXTRACT()
functie haalt subvelden op, zoals het jaar, de maand, het uur of de minuut, deels uit een datum/tijd-waarde.
Voorbeeld:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Resultaat:
2035
We kunnen verschillende datumdelen in afzonderlijke velden retourneren door drie afzonderlijke aanroepen naar deze functie te doen:
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";
Resultaat:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Hier heb ik de dag van de maand, de dag van de week, de dag van het jaar, de maand en het jaar vanaf de datum geretourneerd.
Zie Hoe Extract() werkt in PostgreSQL voor meer voorbeelden en een lijst met veldnamen die door deze functie kunnen worden geretourneerd.
DATE_PART()
De DATE_PART()
functie is het equivalent van EXTRACT()
, maar met een iets andere syntaxis.
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";
Resultaat:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Deze functie vereist dat het eerste argument wordt opgegeven als een tekenreeks, en een komma scheidt de twee argumenten in plaats van de FROM
zoekwoord.
TO_CHAR()
De TO_CHAR()
functie is flexibeler, in die zin dat het kan worden gebruikt om een grotere verscheidenheid aan outputs te bieden. We kunnen deze functie bijvoorbeeld gebruiken om de dag, de maand en het jaar allemaal in één veld te retourneren:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Resultaat:
Saturday , 02nd December 2045
We kunnen de fm
. gebruiken sjabloonmodifier om eventueel toegepaste opvulling te onderdrukken:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Resultaat:
Monday, 1st April 2165
Merk ook op dat de th
sjabloonmodifier is slim genoeg om te weten of st
, nd
, th
, of th
moet worden toegevoegd.
Hier is een voorbeeld dat verschillende aanroepen gebruikt naar TO_CHAR()
om verschillende datumdelen in aparte velden uit te voeren:
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";
Resultaat:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165