SQL — Урок 13. Функции даты и времени
Функции CURDATE() и NOW() удобно использовать для добавления в базу данных записей, использующих текущее время. В нашем магазине все поставки и продажи используют текущее время. Поэтому для добавления записей о поставах, и продажах удобно использовать функцию CURDATE(). Например, пусть в наш магазин пришел товар, давайте добавим информацию об этом в таблицу Поставка (incoming):
INSERT INTO incoming (id_vendor, date_incoming) VALUES (‘2’, curdate());
SELECT id_vendor, date_incoming FROM incoming;
Предположим, мы ошиблись при вводе даты для первого поставщика, давайте уменьшим его дату на одни сутки:
SELECT id_vendor, ADDDATE(date_incoming, INTERVAL -1 DAY) FROM incoming WHERE id_vendor=1;
В качестве значения value могут выступать не только дни, но и недели (WEEK), месяцы (MONTH), кварталы (QUARTER) и годы (YEAR). Давайте для пример уменьшим дату поставки для второго поставщика на 1 неделю:
SELECT id_vendor, ADDDATE(date_incoming, INTERVAL -1 WEEK) FROM incoming WHERE id_vendor=2;
В нашей таблице Поставки (incoming) мы использовали для столбца Дата поставки (date_incoming) тип date. Как вы помните из урока 2, этот тип данных предназначен для хранения только даты. А вот если бы мы использовали тип datatime, то у нас отображалась бы не только дата, но и время. Тогда мы могли бы использовать функцию ADDDATE и для времени. В качестве значения value в этом случае могут выступать секунды (SECOND), минуты (MINUTE), часы (HOUR) и их комбинации:
минуты и секунды (MINUTE_SECOND),
часы, минуты и секунды (HOUR_SECOND),
часы и минуты (HOUR_MINUTE),
дни, часы, минуты и секунды (DAY_SECOND),
дни, часы и минуты (DAY_MINUTE),
дни и часы (DAY_HOUR),
года и месяцы (YEAR_MONTH).
Например, давайте к дате 15 апреля 2011 года две минуты первого прибавим 2 часа 45 минут:
SELECT ADDDATE(‘2011-04-15 00:02:00′, INTERVAL ’02:45’ HOUR_MINUTE);
SELECT SUBDATE(‘2011-04-15 00:02:00′, INTERVAL ’23:53’ HOUR_MINUTE);
SELECT PERIOD_ADD(201102, 2);
FRAC_SECOND — микросекунды
SECOND — секунды
MINUTE — минуты
HOUR — часы
DAY — дни
WEEK — недели
MONTH — месяцы
QUARTER — кварталы
YEAR — годы
SELECT TIMESTAMPADD(DAY, 2, ‘2011-04-02’);
SELECT TIMEDIFF(‘2011-04-17 23:50:00’, ‘2011_04-16 14:50:00’);
SELECT date_incoming, CURDATE(), DATEDIFF(CURDATE(), date_incoming) FROM incoming WHERE id_vendor=1;
SELECT PERIOD_DIFF(201108, 201001);
FRAC_SECOND — микросекунды
SECOND — секунды
MINUTE — минуты
HOUR — часы
DAY — дни
WEEK — недели
MONTH — месяцы
QUARTER — кварталы
YEAR — годы
SELECT TIMESTAMPDIFF(DAY, ‘2011-04-02’, ‘2011-04-17’) AS days, TIMESTAMPDIFF(HOUR, ‘2011-04-16 20:14:00’, ‘2011-04-17 23:58:20’) AS houres;
Функция 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 ,
которая извлекает день из даты
Функция YEAR
Функция YEAR извлекает номер года из даты. Дата может быть в формате date или datetime.
Синтаксис
SELECT YEAR(дата) FROM имя_таблицы WHERE условие
Таблицы для примеров
| id айди |
name имя |
date дата рождения |
|---|---|---|
| 1 | user1 | 1988-03-01 |
| 2 | user2 | 1989-04-02 |
| 3 | user3 | 1990-05-03 |
Пример
В данном примере при выборке из таблицы из даты извлекается год:
SELECT *, YEAR(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 |
Смотрите также
- функцию DAY ,
которая извлекает день из даты - функцию MONTH ,
которая извлекает месяц из даты - функцию DATE ,
которая извлекает дату из даты-времени - функцию HOUR ,
которая извлекает часы из времени - функцию MINUTE ,
которая извлекает минуты из времени - функцию SECOND ,
которая извлекает секунды из времени
YEAR (Transact-SQL)
Возвращает целое число, представляющее год указанной даты.
Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).
Синтаксис
YEAR ( date )
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
date
Выражение, которое можно привести к значению типа time, date, smalldatetime, datetime, datetime2 или datetimeoffset. Аргумент date может быть выражением, выражением столбца, определяемой пользователем переменной или строковым литералом.
Типы возвращаемых данных
int
Возвращаемое значение
Функция YEAR возвращает то же значение, что и функция DATEPART (year, date).
Если дата date содержит только компонент времени, возвращаемое значение равно 1900, базовому году.
Примеры
Следующая инструкция возвращает значение 2010 . Порядковый номер года.
SELECT YEAR('2010-04-30T01:01:01.1234567-07:00');
Следующая инструкция возвращает значение 1900, 1, 1 . В качестве значения аргумента date задается число 0 . SQL Server интерпретируется 0 как 1 января 1900 г.
SELECT YEAR(0), MONTH(0), DAY(0);
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
Следующая инструкция возвращает значение 1900, 1, 1 . В качестве значения аргумента date задается число 0 . SQL Server интерпретируется 0 как 1 января 1900 г.
SELECT TOP 1 YEAR(0), MONTH(0), DAY(0);