PostgreSQL ни предоставя няколко начина да получим деня, месеца и годината от дадена дата.
Три функции, които веднага идват на ум са; DATE_PART()
, EXTRACT()
и TO_CHAR()
.
EXTRACT()
EXTRACT()
функция извлича подполета като година, месец, час или минута, част от стойност за дата/час.
Пример:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Резултат:
2035
Можем да върнем различни части от дата в отделни полета, като направим три отделни извиквания на тази функция:
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";
Резултат:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Тук върнах деня от месеца, деня от седмицата, деня от годината, месеца и годината от датата.
Вижте как Extract() работи в PostgreSQL за повече примери и списък с имена на полета, които могат да бъдат върнати от тази функция.
DATE_PART()
DATE_PART()
функцията е еквивалентна на EXTRACT()
, но с малко по-различен синтаксис.
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";
Резултат:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Тази функция изисква първият аргумент да бъде предоставен като низ и запетая разделя двата аргумента вместо FROM
ключова дума.
TO_CHAR()
TO_CHAR()
функцията е по-гъвкава, тъй като може да се използва за осигуряване на по-голямо разнообразие от изходи. Например, можем да използваме тази функция, за да върнем деня, месеца и годината всички в едно поле:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Резултат:
Saturday , 02nd December 2045
Можем да използваме fm
модификатор на шаблона, за да потисне всяко подпълване, което може да бъде приложено:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Резултат:
Monday, 1st April 2165
Също така имайте предвид, че th
шаблонният модификатор е достатъчно умен, за да знае дали st
, nd
, rd
, или th
трябва да се добави.
Ето пример, който използва различни извиквания към TO_CHAR()
за извеждане на различни части от дата в отделни полета:
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";
Резултат:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165