Ниже приведён список важных функций, которые относятся к дате и времени. Все данные функции доступны для работы с помощью 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.
В следующей статье мы рассмотрим временные таблицы.