Функция EXTRACT
Функция EXTRACT извлекает отдельные части из даты или даты-времени.
Синтаксис
SELECT EXTRACT(что_извлечь FROM дата) FROM имя_таблицы WHERE условие
Вместо ‘что_извлечь’ можно написать, к примеру, DAY — тогда из даты будет извлечен день, или, к примеру, YEAR — тогда будет извлечен год. Если же я напишу так: YEAR_MONTH — то будет извлечен год и месяц (слитно, без разделителя). Если вам нужно извлекать несколько частей не слитно, а используя разделитель — используйте DATE_FORMAT .
Форматы вывода
- SECOND секунды
- MINUTE минуты
- HOUR часы
- DAY дни
- MONTH месяцы
- YEAR года
- MINUTE_SECOND минуты и секунды
- HOUR_MINUTE часы и минуты
- DAY_HOUR дни и часы
- YEAR_MONTH года и месяцы
- HOUR_SECOND
часы, минуты, секунды
- DAY_MINUTE
дни, часы, минуты
- DAY_SECOND
дни, часы, минуты, секунды
Таблицы для примеров
id айди |
name имя |
date дата рождения |
---|---|---|
1 | user1 | 1988-03-01 |
2 | user2 | 1989-04-02 |
3 | user3 | 1990-05-03 |
Пример
В данном примере при выборке из таблицы из даты извлекается день месяца:
SELECT *, EXTRACT(DAY FROM date) as day FROM users
Результат выполнения кода:
id айди |
name имя |
date дата рождения |
day день |
---|---|---|---|
1 | user1 | 1988-03-01 | 1 |
2 | user2 | 1989-04-02 | 2 |
3 | user3 | 1990-05-03 | 3 |
Пример
В данном примере при выборке из таблицы из даты извлекается год:
SELECT *, EXTRACT(YEAR FROM date) as year FROM users
Результат выполнения кода:
id айди |
name имя |
date дата рождения |
year год |
---|---|---|---|
1 | user1 | 1988-03-01 | 1988 |
2 | user2 | 1989-04-02 | 1989 |
3 | user3 | 1990-05-03 | 1990 |
Пример
В данном примере при выборке из таблицы из даты извлекается год и месяц (слитно):
SELECT *, EXTRACT(YEAR_MONTH FROM date) as yearmonth FROM users
Результат выполнения кода:
id айди |
name имя |
date дата рождения |
yearmonth год и месяц |
---|---|---|---|
1 | user1 | 1988-03-01 | 198803 |
2 | user2 | 1989-04-02 | 198904 |
3 | user3 | 1990-05-03 | 199005 |
Смотрите также
- функцию DATE ,
которая извлекает дату из даты-времени - функцию YEAR ,
которая извлекает год из даты - функцию MONTH ,
которая извлекает месяц из даты - функцию DAY ,
которая извлекает день из даты
Как правильно получить год из даты sql
Здравствуйте, мне нужно получить разницу между двумя датами с помощью функции select DATEDIFF(year, 1997-01-01, getdate()) но функция возвращает не верное значение, плохо отрабатывает функция, которая вычисляет год из даты (т.е. 2й аргумент), если выполнить функцию year(1997-01-01) то она вернет 1905, в моей таблице есть поле DateOfBurn и значение его date (при заполнении я только ввожу «1990-02-02») и есть вычисляемый столбец Age DATEDIFF(year, DateOfBurn, getdate()) Помогите пожалуйста составить запрос правильно.
Отслеживать
8,511 2 2 золотых знака 19 19 серебряных знаков 35 35 бронзовых знаков
задан 8 сен 2016 в 7:25
simply good simply good
566 1 1 золотой знак 6 6 серебряных знаков 20 20 бронзовых знаков
Функция DATEPART стр. 2
В MySQL для извлечения каждой составляющей даты имеется соответствующая функция. Так, например, можно получить минуты времени отправления рейсов, которые вылетают в 1-ом часу дня (база данных «Аэропорт»):
Компоненту времени можно также получить при помощи функции EXTRACT . С помощи этой функции решение задачи можно записать в виде:
Дополнительно с помощью функции EXTRACT можно получить составные компоненты даты/времени, например, год и месяц. Решим такую задачу.
Посчитать количество окрасок по месяцам с учетом года (база данных «Окраска»).
Полный список допустимых компонент можно найти, например, здесь .
Примечание:
Здесь уместно будет отметить довольно вольную трактовку группировки в MySQL, при которой в списке столбцов предложения SELECT могут присутствовать столбцы с детализированными данными, отсутствующими в предложении GROUP BY. Очевидно, что агрегаты здесь подразумеваются, т.к., в противном случае, отсутствует однозначная интерпретация операции. Предполагаю, что здесь неявно используются функция MIN или MAX, но я даже не буду это специально выяснять, т.к. предпочитаю в подобных случаях следовать стандарту.
Функций типа Year, Month и т.д. в PostgreSQL, насколько мне известно, нет. Однако есть функция EXTRACT, и второе решение первой задачи, которое мы написали для MySQL, будет работать и под этой СУБД:
Имеется также функция, аналогичная DATEPART в MSSQL. Различия в синтаксисе, надеюсь, станут очевидны из примера решения той же задачи с использованием этой функции:
Перейдем к решению второй задачи. Составные компоненты не поддерживаются в функции EXTRACT для PostgreSQL. Поэтому можно использовать «классическую» групировку по двум компонентам — году и месяцу:
Тем не менее, мы можем реализовать идею составной компоненты при помощи функции форматирования даты TO_CHAR :
Результат будет аналогичен результату решения 3 за отсутствием первых двух столбцов, которые, разумеется, можно добавить в вывод, включив их одновременно в предложение GROUP BY, как это сделано в решении 4.
Страницы: | 1 | 2 |
Как получить год из даты sql
Для извлечения года из даты в PostgreSQL используется функция EXTRACT . Тут всё достаточно тривиально, потому сразу приведу пример её использования:
SELECT EXTRACT(YEAR FROM TIMESTAMP '2022-08-26 12:24:56');