Функции даты и времени
Для получения текущей даты и времени используются следующие функции:
? NOW(), LOCALTIME() и LOCALTIMESTAMP() возвращают текущие дату и вре-
мя в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС;
SELECT NOW();
/* Выведет: 2024-09-21 22:35:04 */ SELECT LOCALTIME();
/* Выведет: 2024-09-21 22:35:04 */ SELECT LOCALTIMESTAMP();
/* Выведет: 2024-09-21 22:35:04 */
? UTC_TIMESTAMP() выводит текущие дату и время по Гринвичу в формате
ГГГГ-ММ-ДД ЧЧ:ММ:СС;
SELECT UTC_TIMESTAMP();
/* Выведет: 2024-09-21 18:36:21 */
? SYSDATE() позволяет определить текущие дату и время в формате ГГГГ-
ММ-ДД ЧЧ:ММ:СС:
SELECT SYSDATE();
/* Выведет: 2024-09-21 22:36:43 */
В отличие от функции NOW() и ее синонимов SYSDATE() возвращает вре- мя, в которое она была вызвана, тогда как NOW() возвращает время начала выполнения запроса;
? CURDATE() и CURRENT_DATE() возвращают текущую дату в формате ГГГГ-
ММ-ДД:
SELECT CURDATE();
/* Выведет: 2024-09-21 */ SELECT CURRENT_DATE();
/* Выведет: 2024-09-21 */
? UTC_DATE() позволяет определить текущую дату по Гринвичу в формате
ГГГГ-ММ-ДД:
SELECT UTC_DATE();
/* Выведет: 2024-09-21 */
? CURTIME() и CURRENT_TIME() возвращают текущее время в формате
ЧЧ:ММ:СС;
SELECT CURTIME();
/* Выведет: 22:38:01 */ SELECT CURRENT_TIME();
/* Выведет: 22:38:01 */
? UTC_TIME() сообщает текущее время по Гринвичу в формате ЧЧ:ММ:СС:
SELECT UTC_TIME();
/* Выведет: 18:38:01 */
? UNIX_TIMESTAMP() подсчитывает число секунд, прошедших с полуночи
1 января 1970 г.:
SELECT UNIX_TIMESTAMP();
/* Выведет: 1253558203 */
Ряд функций позволяют получить следующие фрагменты даты и времени:
? DATE() — дата:
SELECT DATE(’2009-09-21 22:36:43′);
/* Выведет: 2024-09-21 */
? YEAR() — год:
SELECT YEAR(’2009-09-21 22:36:43′);
/* Выведет: 2009 */
? MONTH() — месяц:
SELECT MONTH(’2009-09-21 22:36:43′);
/* Выведет: 9 */
? MONTHNAME() — английское название месяца в виде строки:
SELECT MONTHNAME(’2009-09-21 22:36:43′);
/* Выведет: September */
? DAY() и DAYOFMONTH() — номер дня в месяце:
SELECT DAY(’2009-09-21 22:36:43′);
/* Выведет: 21 */
SELECT DAYOFMONTH(’2009-09-21 22:36:43′);
/* Выведет: 21 */
? TIME() — время:
SELECT TIME(’2009-09-21 22:36:43′);
/* Выведет: 22:36:43 */
? HOUR() — час:
SELECT HOUR(’2009-09-21 22:36:43′);
/* Выведет: 22 */
? MINUTE() — минуты:
SELECT MINUTE(’2009-09-21 22:36:43′);
/* Выведет: 36 */
? SECOND() — секунды:
SELECT SECOND(’2009-09-21 22:36:43′);
/* Выведет: 43 */
? MICROSECOND() — микросекунды:
SELECT MICROSECOND(’2009-09-21 22:36:43.123456′);
/* Выведет: 123456 */
Вместо перечисленных функций можно использовать функцию EXTRACT().
Функция имеет следующий формат:
EXTRACT(<Тип> FROM <Дата и время>)
Параметр <Тип> может принимать такие значения:
? YEAR — год:
SELECT EXTRACT(YEAR FROM ’2009-09-21 22:36:43′);
/* Выведет: 2009 */
? YEAR_MONTH — год и месяц:
SELECT EXTRACT(YEAR_MONTH FROM ’2009-09-21 22:36:43′);
/* Выведет: 200909 */
? MONTH — месяц:
SELECT EXTRACT(MONTH FROM ’2009-09-21 22:36:43′);
/* Выведет: 9 */
? DAY — день:
SELECT EXTRACT(DAY FROM ’2009-09-21 22:36:43′);
/* Выведет: 21 */
? DAY_HOUR — день и час:
SELECT EXTRACT(DAY_HOUR FROM ’2009-09-21 22:36:43′);
/* Выведет: 2122 */
? DAY_MINUTE — день, час и минуты:
SELECT EXTRACT(DAY_MINUTE FROM ’2009-09-21 22:36:43′);
/* Выведет: 212236 */
? DAY_SECOND — день, час, минуты и секунды:
SELECT EXTRACT(DAY_SECOND FROM ’2009-09-21 22:36:43′);
/* Выведет: 21223643 */
? DAY_MICROSECOND — день, час, минуты, секунды и микросекунды:
SELECT EXTRACT(DAY_MICROSECOND FROM ’2009-09-21
22:36:43.111111′);
/* Выведет: 21223643111111 */
? HOUR — час:
SELECT EXTRACT(HOUR FROM ’2009-09-21 22:36:43′);
/* Выведет: 22 */
? HOUR_MINUTE — час и минуты:
SELECT EXTRACT(HOUR_MINUTE FROM ’2009-09-21 22:36:43′);
/* Выведет: 2236 */
? HOUR_SECOND — час, минуты и секунды:
SELECT EXTRACT(HOUR_SECOND FROM ’2009-09-21 22:36:43′);
/* Выведет: 223643 */
? HOUR_MICROSECOND — час, минуты, секунды и микросекунды:
SELECT EXTRACT(HOUR_MICROSECOND FROM ’2009-09-21 22:36:43.111111′);
/* Выведет: 223643111111 */
? MINUTE — минуты:
SELECT EXTRACT(MINUTE FROM ’2009-09-21 22:36:43′);
/* Выведет: 36 */
? MINUTE_SECOND — минуты и секунды:
SELECT EXTRACT(MINUTE_SECOND FROM ’2009-09-21 22:36:43′);
/* Выведет: 3643 */
? MINUTE_MICROSECOND — минуты, секунды и микросекунды:
SELECT EXTRACT(MINUTE_MICROSECOND FROM ’2009-09-21
22:36:43.111111′);
/* Выведет: 3643111111 */
? SECOND — секунды:
SELECT EXTRACT(SECOND FROM ’2009-09-21 22:36:43′);
/* Выведет: 43 */
? SECOND_MICROSECOND — секунды и микросекунды:
SELECT EXTRACT(SECOND_MICROSECOND FROM ’2009-09-21 22:36:43.111111′);
/* Выведет: 43111111 */
? MICROSECOND — микросекунды:
SELECT EXTRACT(MICROSECOND FROM ’2009-09-21 22:36:43.111111′);
/* Выведет: 111111 */
С помощью следующих функций можно получить дополнительные сведения о дате:
? QUARTER() — порядковый номер квартала в году (от 1 до 4):
SELECT QUARTER(’2009-09-21′);
/* Выведет: 3 */
? WEEKOFYEAR() — порядковый номер недели в году (от 1 до 53):
SELECT WEEKOFYEAR(’2009-09-21′);
/* Выведет: 39 */
? WEEK() — порядковый номер недели в году (от 0 до 53). Неделя начина-
ется с воскресенья:
SELECT WEEK(’2009-09-21′);
/* Выведет: 38 */
? YEARWEEK() — число в формате ГГГГНН, где ГГГГ — год, а НН — порядко-
вый номер недели в году (от 0 до 53). Неделя начинается с воскресенья:
SELECT YEARWEEK(’2009-09-21′);
/* Выведет: 200938 */
? DAYOFYEAR() — порядковый номер дня в году (от 1 до 366):
SELECT DAYOFYEAR(’2009-09-21′);
/* Выведет: 264 */
? MAKEDATE(<Год>, <Номер дня в году>) — дата в формате ГГГГ-ММ-ДД по номеру дня в году:
SELECT MAKEDATE(2009, 264);
/* Выведет: 2024-09-21 */
? DAYOFWEEK() — порядковый номер дня недели (1 — для воскресенья, 2 —
для понедельника, …, 7 — для субботы):
SELECT DAYOFWEEK(’2009-09-21′);
/* Выведет: 2 */
? WEEKDAY() — порядковый номер дня недели (0 — для понедельника, 1 —
для вторника, …, 6 — для воскресенья):
SELECT WEEKDAY(’2009-09-21′);
/* Выведет: 0 */
? DAYNAME() — название дня недели на английском языке:
SELECT DAYNAME(’2009-09-21′);
/* Выведет: Monday */
? TO_DAYS(<Дата>) — количество дней, прошедших с нулевого года:
SELECT TO_DAYS(’2009-09-21′);
/* Выведет: 734036 */
? FROM_DAYS(<Количество дней>) — дата в формате ГГГГ-ММ-ДД по количе-
ству дней, прошедших с нулевого года:
SELECT FROM_DAYS(734036);
/* Выведет: 2024-09-21 */
? TIME_TO_SEC(<Время>) — количество секунд, прошедших с начала суток:
SELECT TIME_TO_SEC(’12:52:35′);
/* Выведет: 46355 */
? SEC_TO_TIME(<Количество секунд>) — время в формате ЧЧ:ММ:СС по ко-
личеству секунд, прошедших с начала суток:
SELECT SEC_TO_TIME(46355);
/* Выведет: 12:52:35 */
Для манипуляции датой и временем можно использовать следующие функции:
? ADDDATE(<Дата>, INTERVAL <Интервал> <Тип>) и DATE_ADD(<Дата>, INTERVAL <Интервал> <Тип>) прибавляют к параметру <Дата> временной интервал;
? SUBDATE(<Дата>, INTERVAL <Интервал> <Тип>) и DATE_SUB(<Дата>, INTERVAL <Интервал> <Тип>) вычитают из параметра <Дата> временной интервал.
Параметр <Тип> в функциях ADDDATE(), DATE_ADD(), SUBDATE() и
DATE_SUB() может принимать следующие значения:
• YEAR — год:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 2 YEAR);
/* Выведет: 2024-09-21 22:36:43 */
• YEAR_MONTH — год и месяц (формат ‘ГГ-ММ’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’2-2′ YEAR_MONTH);
/* Выведет: 2023-11-21 22:36:43 */
• MONTH — месяц:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 3 MONTH);
/* Выведет: 2023-12-21 22:36:43 */
• DAY — день:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 6 DAY);
/* Выведет: 2024-09-27 22:36:43 */
• DAY_HOUR — день и час (формат ‘ДД ЧЧ’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’6 3′ DAY_HOUR);
/* Выведет: 2024-09-28 01:36:43 */
• DAY_MINUTE — день, час и минуты (формат ‘ДД ЧЧ:ММ’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’6 3:5′ DAY_MINUTE);
/* Выведет: 2024-09-28 01:41:43 */
• DAY_SECOND — день, час, минуты и секунды (формат ‘ДД ЧЧ:ММ:СС’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’6 3:5:15′ DAY_SECOND);
/* Выведет: 2024-09-28 01:41:58 */
• DAY_MICROSECOND — день, час, минуты, секунды и микросекунды
(формат ‘ДД ЧЧ:ММ:СС.XXXXXX’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’6 3:5:15.10′ DAY_MICROSECOND);
/* Выведет: 2024-09-28 01:41:58.100000 */
• HOUR — час:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 3 HOUR);
/* Выведет: 2024-09-22 01:36:43 */
• HOUR_MINUTE — час и минуты (формат ‘ЧЧ:ММ’): SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’3:7′ HOUR_MINUTE);
/* Выведет: 2024-09-22 01:43:43 */
• HOUR_SECOND — час, минуты и секунды (формат ‘ЧЧ:ММ:СС’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’3:7:15′ HOUR_SECOND);
/* Выведет: 2024-09-22 01:43:58 */
• HOUR_MICROSECOND — час, минуты, секунды и микросекунды (формат
‘ЧЧ:ММ:СС.XXXXXX’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’3:7:15.10′ HOUR_MICROSECOND);
/* Выведет: 2024-09-22 01:43:58.100000 */
• MINUTE — минуты:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 8 MINUTE);
/* Выведет: 2024-09-21 22:44:43 */
• MINUTE_SECOND — минуты и секунды (формат ‘ММ:СС’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’3:7′ MINUTE_SECOND);
/* Выведет: 2024-09-21 22:39:50 */
• MINUTE_MICROSECOND — минуты, секунды и микросекунды (формат
‘ММ:СС.XXXXXX’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’3:7.11′ MINUTE_MICROSECOND);
/* Выведет: 2024-09-21 22:39:50.110000 */
• SECOND — секунды:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 15 SECOND);
/* Выведет: 2024-09-21 22:36:58 */
• SECOND_MICROSECOND — секунды и микросекунды (формат
‘СС.XXXXXX’):
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL ’15.123456′ SECOND_MICROSECOND);
/* Выведет: 2024-09-21 22:36:58.123456 */
• MICROSECOND — микросекунды:
SELECT ADDDATE(’2009-09-21 22:36:43′, INTERVAL 123456 MICROSECOND);
/* Выведет: 2024-09-21 22:36:43.123456 */
Кроме того, функции ADDDATE() и SUBDATE() можно применять в сокра-
щенном формате, описанном далее;
? ADDDATE(<Дата>, <Интервал в днях>) прибавляет к параметру <Дата> временной интервал в днях. Если указать перед интервалом знак -, то ин- тервал вычитается из даты:
SELECT ADDDATE(’2009-09-21′, 10);
/* Выведет: 2024-10-01 */
SELECT ADDDATE(’2009-09-21′, -10);
/* Выведет: 2024-09-11 */
? SUBDATE(<Дата>, <Интервал в днях>) вычитает из параметра <Дата>
временной интервал в днях.
Если указать перед интервалом знак -, то интервал прибавляется к дате:
SELECT SUBDATE(’2009-09-21′, 10);
/* Выведет: 2024-09-11 */
SELECT SUBDATE(’2009-09-21′, -10);
/* Выведет: 2024-10-01 */
? ADDTIME(<Дата>, <Время>) прибавляет к параметру <Дата> временной интервал:
SELECT ADDTIME(’2009-09-21 22:36:43′, ’12:52:35′);
/* Выведет: 2024-09-22 11:29:18 */
? SUBTIME(<Дата>, <Время>) вычитает из параметра <Дата> временной ин-
тервал:
SELECT SUBTIME(’2009-09-21 22:36:43′, ’12:52:35′);
/* Выведет: 2024-09-21 09:44:08 */
? DATEDIFF(<Конечная дата>, <Начальная дата>) вычисляет количество дней между двумя датами:
SELECT DATEDIFF(’2009-09-27′, ’2009-09-21′);
/* Выведет: 6 */
? TIMEDIFF(<Конечная дата>, <Начальная дата>) вычисляет разницу ме-
жду двумя временными значениями:
SELECT TIMEDIFF(’2009-09-21 22:36:43′, ’2009-09-21 15:36:43′);
/* Выведет: 07:00:00 */
? PERIOD_ADD(<Дата>, <Количество месяцев>) добавляет заданное <Коли-
чество месяцев> к дате, заданной в формате ГГГГММ или ГГММ:
SELECT PERIOD_ADD(200904, 4);
/* Выведет: 200908 */
? PERIOD_DIFF(<Конечная дата>, <Начальная дата>) вычисляет разницу в месяцах между двумя временными значениями, заданными в формате ГГГГММ или ГГММ:
SELECT PERIOD_DIFF(200908, 200904);
/* Выведет: 4 */
? CONVERT_TZ(<Дата>, <Часовой пояс1>, <Часовой пояс2>) переводит дату из одного часового пояса в другой:
SELECT CONVERT_TZ(’2009-09-21 22:36:43′, ‘+00:00′, ‘+4:00′);
/* Выведет: 2024-09-22 02:36:43 */
? LAST_DAY(<Дата>) возвращает дату в формате ГГГГ-ММ-ДД, в которой день выставлен на последний день текущего месяца:
SELECT LAST_DAY(’2009-09-21 22:36:43′);
/* Выведет: 2024-09-30 */
? MAKETIME(<Часы>, <Минуты>, <Секунды>) возвращает время в формате
ЧЧ:ММ:СС:
SELECT MAKETIME(12, 52, 35);
/* Выведет: 12:52:35 */
? TIMESTAMP(<Дата>, [<Время>]) возвращает дату в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС:
SELECT TIMESTAMP(’2009-09-21′);
/* Выведет: 2024-09-21 00:00:00 */
SELECT TIMESTAMP(’2009-09-21′, ’12:52:35′);
/* Выведет: 2024-09-21 12:52:35 */
Помимо описанных функций добавить или вычесть интервал времени можно с помощью операторов + и -, за которыми следует ключевое слово INTERVAL, значение и тип интервала. Применимы те же типы интервалов, что и в функ- циях ADDDATE(), DATE_ADD(), SUBDATE() и DATE_SUB():
SELECT ’2009-09-21 22:36:43′ + INTERVAL ’3:7:15′ HOUR_SECOND;
/* Выведет: 2024-09-22 01:43:58 */
SELECT ’2009-09-21 22:36:43′ - INTERVAL ’3:7:15′ HOUR_SECOND;
/* Выведет: 2024-09-21 19:29:28 */
Для форматирования даты и времени также предназначено несколько функций:
? DATE_FORMAT(<Дата>, <Формат>) форматирует дату в соответствии со строкой <Формат>:
SELECT DATE_FORMAT(’2009-09-21 22:36:43′, ‘%d.%m.%Y’);
/* Выведет: 21.09.2024 */
? STR_TO_DATE(<Дата>, <Формат>) возвращает дату в форматах ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГ-ММ-ДД по дате, соответствующей строке <Формат>:
SELECT STR_TO_DATE(’21.09.2009 12:52:35′, ‘%d.%m.%Y %H:%i:%s’);
/* Выведет: 2024-09-21 12:52:35 */
? TIME_FORMAT(<Время>, <Формат>) форматирует время в соответствии со строкой <Формат>:
SELECT TIME_FORMAT(’12:52:35′, ‘%H %i %s’);
/* Выведет: 12 52 35 */
? FROM_UNIXTIME(<Дата>, [<Формат>]) возвращает дату в формате ГГГГ- ММ-ДД ЧЧ:ММ:СС или соответствующую строке <Формат> по количеству секунд, прошедших с полуночи 1 января 1970 г.:
SELECT FROM_UNIXTIME(1239671919);
/* Выведет: 2024-04-14 05:18:39 */
SELECT FROM_UNIXTIME(1239671919, ‘%d.%m.%Y’);
/* Выведет: 14.04.2024 */
? GET_FORMAT(<Тип времени>, ‘<Стандарт>’) возвращает строку формати-
рования для пяти стандартов отображения даты и времени. Параметр
<Тип времени> может принимать следующие значения:
• DATETIME — дата и время;
• DATE — дата;
• TIME — время.
Параметр <Стандарт> может принимать такие значения:
• ISO — стандарт ISO;
• EUR — европейский стандарт;
• USA — американский стандарт;
• JIS — японский стандарт;
• INTERNAL — внутренний формат MySQL.
Например:
SELECT GET_FORMAT(DATE, ‘EUR’);
/* Выведет: %d.%m.%Y */
SELECT DATE_FORMAT(’2009-09-21 22:36:43′, GET_FORMAT(DATE, ‘EUR’));
/* Выведет: 21.09.2024 */
Параметр <Формат> в функциях форматирования может содержать следую-
щие комбинации символов:
? %Y — год из 4-х цифр;
? %y — год из 2-х цифр;
? %m — номер месяца с предваряющим нулем (от 01 до 12);
? %c — номер месяца без предваряющего нуля (от 1 до 12);
? %b — аббревиатура месяца из 3-х букв по-английски;
? %M — полное название месяца по-английски;
? %d — номер дня с предваряющим нулем (от 01 до 31);
? %e — номер дня без предваряющего нуля (от 1 до 31);
? %w — номер дня недели (0 — для воскресенья и 6 — для субботы);
? %a — аббревиатура дня недели из 3-х букв по-английски;
? %W — полное название дня недели по-английски;
? %H — часы в 24-часовом формате (от 00 до 23);
? %h — часы в 12-часовом формате (от 01 до 12);
? %i — минуты (от 00 до 59);
? %s — секунды (от 00 до 59);
? %f — микросекунды;
? %% — знак процента.
Настройки параметра <Формат> зависят от значения переменной
lc_time_names. Выведем текущее значение переменной:
SELECT @@lc_time_names;
/* Выведет: en_US */
В качестве примера изменим значение переменной и выведем название меся-
ца на русском языке:
SELECT DATE_FORMAT(’2009-02-19 22:36:43′, ‘%d %M %Y’);
/* Выведет: 19 February 2024 */ SET lc_time_names = ‘ru_RU’;
SELECT DATE_FORMAT(’2009-02-19 22:36:43′, ‘%d %M %Y’);
/* Выведет: 19 Февраля 2009 */
Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)
Похожие посты:
- Применение эффекта прозрачности (0)
- Изменение вида элементов формы с помощью CSS (0)
- Достижение прозрачности изображения в формате PNG в Internet Explorer 6 (1)
- Создание содержимого в формате, отличном от HTML (0)
- Генерация ответа в формате PDF Django (0)
- Раздел BODY. Основная часть документа (0)
- Горизонтальная линия (0)