Проблем:
Искате да получите номера на седмицата на стойност на дата или време в база данни на PostgreSQL.
Пример:
Нашата база данни има таблица с име children
с данни в колоните id
, first_name
, last_name
и birth_date
.
id | first_name | фамилно_име | родена_дата |
---|---|---|---|
1 | Анджела | Мишлен | 01.01.2018 |
2 | Мартин | Джаксън | 26.07.2002 |
3 | Джъстин | Кларк | 26.12.2010 |
4 | Франк | Баркър | 08.06.2008 |
За всяко дете нека получим неговото име, фамилия и номера на седмицата на рождената му дата.
Решение 1:
Ще използваме DATE_PART()
функция. Ето заявката, която бихте написали:
SELECT first_name, last_name, DATE_PART('week',birth_date) AS birth_week_number FROM children;
Ето резултата от заявката:
first_name | фамилно_име | номер_на_седмица |
---|---|---|
Анджела | Мишлен | 1 |
Мартин | Джаксън | 30 |
Джъстин | Кларк | 51 |
Франк | Баркър | 23 |
Дискусия:
Използвайте DATE_PART()
функция за извличане на номера на седмицата от дата в база данни на PostgreSQL. Тази функция приема два аргумента. Първият аргумент е частта с дата за извличане; използваме „седмица“, която връща номера на седмицата (напр. „1“ за първата седмица на януари, първата седмица от годината). Можете да използвате друга част от датата, като ден, година, месец, час, минута, дой (числото на деня в годината) и т.н. Можете да научите повече за частите за дата в документацията на PostgreSQL.
Вторият аргумент е име на колона на типа данни за дата/време/време или израз, връщащ един от тези типове. (В нашия пример това е колона с дата тип данни.)
Когато се използва с частта за дата „седмица“, функцията DATE_PART()
връща номера на седмицата като цяло число. В нашия пример се показва номерът на седмицата за датата на раждане на даденото дете; нарекохме тази колона birth_week_number
. Мартин Джаксън е роден на 2002-07-26
, така че функцията връща „30“ като номер на седмицата на неговата рождена дата.
DATE_PART()
не е само един от начините да получите номера на седмицата. Друга възможност е да използвате EXTRACT()
функция.
Решение 2:
Ще използваме EXTRACT()
функция. Ето заявката, която бихте написали:
SELECT first_name, last_name, EXTRACT('week' FROM birth_date) AS birth_week_number FROM children;
Тази функция е подобна на DATE_PART()
. Разликата е в синтаксиса:вместо запетая между името на частта от датата и колоната/израза има ключовата дума FROM. Също така, EXTRACT()
функцията е стандарт на SQL. Резултатът е еднакъв и за двете функции.