PostgreSQL ger oss flera sätt att få dagen, månaden och året från ett datum.
Tre funktioner som direkt kommer att tänka på är; DATE_PART()
, EXTRACT()
och TO_CHAR()
.
EXTRACT()
EXTRACT()
funktionen hämtar underfält som år, månad, timme eller minut, del från ett datum-/tidsvärde.
Exempel:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Resultat:
2035
Vi kan returnera olika datumdelar i separata fält genom att göra tre separata anrop till denna 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:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Här returnerade jag månadsdagen, veckodagen, årets dag, månaden och året från datumet.
Se Hur Extract() fungerar i PostgreSQL för fler exempel och en lista över fältnamn som kan returneras av den här funktionen.
DATE_PART()
DATE_PART()
funktion är motsvarigheten till EXTRACT()
, men med en något annorlunda syntax.
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:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Den här funktionen kräver att det första argumentet tillhandahålls som en sträng och ett kommatecken skiljer de två argumenten åt istället för FROM
nyckelord.
TO_CHAR()
TO_CHAR()
Funktionen är mer flexibel, eftersom den kan användas för att tillhandahålla ett större utbud av utgångar. Till exempel kan vi använda den här funktionen för att returnera dagen, månaden och året i ett fält:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Resultat:
Saturday , 02nd December 2045
Vi kan använda fm
mallmodifierare för att undertrycka eventuell utfyllnad som kan tillämpas:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Resultat:
Monday, 1st April 2165
Observera också att den th
mallmodifierare är smart nog att veta om st
, nd
, rd
, eller th
bör läggas till.
Här är ett exempel som använder olika anrop till TO_CHAR()
för att mata ut olika datumdelar i separata fält:
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:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165