Ниже приведён список важных функций, которые относятся к дате и времени. Все данные функции доступны для работы с помощью SQL.
Примеры, приведённые ниже предназначены для RDBMS MySQL.
| Name | Description |
|---|---|
| ADDDATE() | Добавляет дату |
| ADDTIME() | Добавляет время |
| CONVERT_TZ() | Конвертирует одну временную зону в другую. |
| CURDATE() | Возвращает текущую дату. |
| CURRENT_DATE(), CURRENT_DATE | То же самое, что и CURDATE. |
| CURTIME() | Возвращает текущее время |
| NOW() | Возвращает текущие дату и время. |
| CURRENT_TIME(), CURRENT_TIME | То же самое, что и NOW() |
| DATE_ADD() | Добавляет две даты |
| DATE_FORMAT() | Определяет формат даты |
| DATE_SUB() | Разбивает две даты |
| DATE() | Возвращает только дату (число, месяц, год) из даты. |
| DATEDIFF() | Разделяет две даты |
| DAY() | То же самое, что и DAYOFMONTH() |
| DAYNAME() | Возвращает имя дня недели. |
| DAYOFMONTH() | Возвращает день месяца |
| DAYOFWEEK() | Возвращает индекс аргумента дня недели |
| DAYOFYEAR() | Возвращает номер дня в году (1 – 366) |
| EXTRACT | Выдаёт часть даты |
| FROM_DAYS() | Конвертирует номер дня в дату. |
| FROM_UNIXTIME() | Форматирует дату в дата/время для UNIX систем. |
| HOUR() | Возвращает часы |
| LAST_DAY | Возвращает крайний день месяца. |
| LOCALTIME(), LOCALTIME | То же самое, что и NOW() |
| LOCALTIMESTAMP, LOCALTIMESTAMP() | То же самое, что и NOW() |
| MAKEDATE() | Создаёт дату из года и дня в году |
| MAKETIME | Создаёт время |
| MICROSECOND() | Возвращает микросекунды |
| MINUTE() | Возвращает только минуты |
| MONTH() | Возвращает только месяц |
| MONTHNAME() | Возвращает имя месяца |
| CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP | Синоним для NOW() |
| PERIOD_ADD() | Добавляет период для в месяце-году. |
| PERIOD_DIFF() | Возвращает количество месяцев в периоде. |
| QUARTER() | Возвращает квартал |
| SEC_TO_TIME() | Конвертирует секунды в формат ‘ЧЧ:ММ:СС’ |
| SECOND() | Возвращает секунды (0 – 59) |
| STR_TO_DATE() | Конвертирует строку в дату |
| SUBDATE() | То же самое, что и DATE_SUB() Требует три аргумента |
| SUBTIME() | Разделяет время |
| SYSDATE() | Возвращает системное время |
| TIME_FORMAT() | Определяет формат времени |
| TIME_TO_SEC() | Конвертирует время в секунды |
| TIME() | Возвращает время. |
| TIMEDIFF() | Отделяет время |
| TIMESTAMP() | Возвращает текущие дату и время. |
| TIMESTAMPADD() | Добавляет период дата/время |
| IMESTAMPDIFF() | Отделяет интервал из дата/время |
| TO_DAYS() | Конвертирует дату в дни |
| UNIX_TIMESTAMP() | Возвращает дату/время для UNIX систем |
| UTC_DATE() | Возвращает дату UTC |
| UTC_TIME() | Возвращает время UTC |
| UTC_TIMESTAMP() | Возвращает дату/время UTC |
| WEEK() | Возвращает номер недели |
| WEEKDAY() | Возвращает индекс дня недели |
| WEEKOFYEAR() | Возвращает номер недели в году (1 – 53) |
| YEAR() | Возвращает год |
| YEARWEEK() | Возвращает год и неделю |
Примеры
Добавление даты (ADDDATE)
mysql> SELECT DATE_ADD('2016-06-30', INTERVAL 30 DAY);
+-----------------------------------------+
| DATE_ADD('2016-06-30', INTERVAL 30 DAY) |
+-----------------------------------------+
| 2016-07-30 |
+-----------------------------------------+
1 row in set (0.00 sec)
Добавление времени (ADDTIME)
mysql> SELECT ADDTIME('2016-06-06 23:59:59', '2 2:2:2.0');
+---------------------------------------------+
| ADDTIME('2016-06-06 23:59:59', '2 2:2:2.0') |
+---------------------------------------------+
| 2016-06-09 02:02:01 |
+---------------------------------------------+
1 row in set (0.00 sec)
Конвертация временной зоны (CONVERT_TZ)
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+03:00');
+-----------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+03:00') |
+-----------------------------------------------------+
| 2004-01-01 15:00:00 |
+-----------------------------------------------------+
1 row in set (0.00 sec)
Текущая дата (CURDATE())
mysql> SELECT CURDATE();
+------------+
| CURDATE() |
+------------+
| 2016-06-04 |
+------------+
1 row in set (0.00 sec)
Текущее время (CURTIME())
mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 14:19:55 |
+-----------+
1 row in set (0.00 sec)
Дата (DATE)
mysql> SELECT DATE('2016-06-04 15:00:00');
+-----------------------------+
| DATE('2016-06-04 15:00:00') |
+-----------------------------+
| 2016-06-04 |
+-----------------------------+
1 row in set (0.00 sec)
Разница во времени (DATEDIFF())
mysql> SELECT DATEDIFF ('2016-06-06 00:00:00', '1988-10-28 12:00:00');
+---------------------------------------------------------+
| DATEDIFF ('2016-06-06 00:00:00', '1988-10-28 12:00:00') |
+---------------------------------------------------------+
| 10083 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
Добавление даты (DATEADD(), DATE_SUB())
Данные функции обеспечивают арифметику дат. Мы можем добавить или отнять определённый интервал времени от определённой даты.
Ниже приведена таблица, в которой указаны возможные аргументы для интервалов:
| Значение | Ожидаемый формат |
| MICROSECOND | Микросекунды |
| SECOND | Секунды |
| MINUTE | Минуты |
| HOUR | Часы |
| DAY | Дни |
| WEEK | Недели |
| MONTH | Месяцы |
| QUARTER | Кварталы |
| YEAR | Годы |
| SECOND_MICROSECOND | ‘Секунды.Микросекунды’ |
| MINUTE_MICROSECOND | Минуты.Микросекунды’ |
| MINUTE_SECOND | ‘Минуты.Секунды’ |
| HOUR_MICROSECOND | ‘Часы.Микросекунды’ |
| HOUR_SECOND | ‘Часы.Секунды.Микросекунды’ |
| HOUR_MINUTE | ‘Часы.Минуты’ |
| DAY_MICROSECOND | ‘Дни.Микросекунды’ |
| DAY_SECOND | Дни.Часы.Минуты.Секунды |
| DAY_MINUTE | Дни.Часы.Минуты |
| DAY_HOUR | Дни.Часы |
| YEAR_MONTH | Года.Месяцы |
mysql> SELECT DATE_ADD('2016-06-04 20:00:00', INTERVAL '1:1' DAY_HOUR);
+----------------------------------------------------------+
| DATE_ADD('2016-06-04 20:00:00', INTERVAL '1:1' DAY_HOUR) |
+----------------------------------------------------------+
| 2016-06-05 21:00:00 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
Формат даты
Формат даты определяется с помощью специальных символов.
Список таких символов приведён в таблице, которая находится ниже:
| Спецификатор | Описание |
| %a | Сокращённое имя дня недели |
| %b | Сокращённое имя месяца |
| %c | Номер месяца |
| %D | День месяца с английским суффиксом |
| %d | Номер дня в месяце (00 … 31) |
| %e | Номер дня в месяце (0 … 31) |
| %f | Микросекунды (000000 … 999999) |
| %H | Часы (00 … 23) |
| %h | Часы (01 … 12) |
| %I | Часы (01 … 12) |
| %i | Минуты (00 … 59) |
| %j | Дни года (001 … 366) |
| %k | Часы (00 … 23) |
| %l | Часы (1 … 12) |
| %M | Имя месяца |
| %m | Номер месяца |
| %p | AM или PM |
| %r | Время с использованием AM или PM |
| %S | Секунды (00 … 59) |
| %s | Секунды (00 … 59) |
| %T | Время (ЧЧ:ММ:СС) |
| %U | Неделя (00 … 53). Первый день недели – Воскресенье |
| %u | Неделя (00 … 53). Первый день недели – Понедельник |
| %V | Неделя (00 … 53). Первый день недели – Воскресенье. Используется с %X |
| %v | Неделя (00 … 53). Первый день недели – Понедельник. Используется с %x |
| %W | День недели |
| %w | День недели (0 – Воскресенье … 6 – Суббота) |
| %X | Год для недели. Воскресенье – первый день недели. Используется с %V |
| %x | Год для недели. Понедельник – первый день недели. Используется с %v |
| %Y | Год (YYYY) |
| %y | Год (YY) |
| %% | Символ .%. |
| %x | То же самое для любых элементов, указанных выше |
mysql> SELECT DATE_FORMAT ('2016-06-04 22:00:00', '%W %M %Y');
+-------------------------------------------------+
| DATE_FORMAT ('2016-06-04 22:00:00', '%W %M %Y') |
+-------------------------------------------------+
| Saturday June 2016 |
+-------------------------------------------------+
1 row in set (0.00 sec)
Имя дня (DAYNAME())
mysql> SELECT DAYNAME('1988-10-28');
+-----------------------+
| DAYNAME('1988-10-28') |
+-----------------------+
| Friday |
+-----------------------+
1 row in set (0.00 sec)
День месяца (DAYOFMONTH())
mysql> SELECT DAYOFMONTH('1988-10-28');
+--------------------------+
| DAYOFMONTH('1988-10-28') |
+--------------------------+
| 28 |
+--------------------------+
1 row in set (0.01 sec)
День недели (DAYOFWEEK())
mysql> SELECT DAYOFWEEK('1988-10-28');
+-------------------------+
| DAYOFWEEK('1988-10-28') |
+-------------------------+
| 6 |
+-------------------------+
1 row in set (0.00 sec)
День в году (DAYOFYEAR())
mysql> SELECT DAYOFYEAR('1988-10-28');
+-------------------------+
| DAYOFYEAR('1988-10-28') |
+-------------------------+
| 302 |
+-------------------------+
1 row in set (0.00 sec)
Неделя (WEEK())
mysql> SELECT WEEK('1988-10-28');
+--------------------+
| WEEK('1988-10-28') |
+--------------------+
| 43 |
+--------------------+
1 row in set (0.00 sec)
На этом мы заканчиваем изучение функций даты в языке SQL.
В следующей статье мы рассмотрим временные таблицы.
![]()