Для получения текущей даты и времени используются следующие функции: □ NOW(), LOCALTIME() и LOCALTIMESTAMP() возвращают текущие дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС; SELECT NOW(); /* Выведет: 2009-09-21 22:35:04 */ SELECT LOCALTIME(); /* Выведет: 2009-09-21 22:35:04 */ SELECT LOCALTIMESTAMP(); /* Выведет: 2009-09-21 22:35:04 */ □ UTC_TIMESTAMP() выводит текущие дату и время по Гринвичу в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС; SELECT UTC_TIMESTAMP(); /* Выведет: 2009-09-21 18:36:21 */ □ SYSDATE() позволяет определить текущие дату и время в формате ГГГГ- ММ-ДД ЧЧ:ММ:СС: SELECT SYSDATE(); /* Выведет: 2009-09-21 22:36:43 */ В отличие от функции NOW() и ее синонимов SYSDATE() возвращает время, в которое она была вызвана, тогда как NOW() возвращает время начала выполнения запроса; □ CURDATE() и CURRENT_DATE() возвращают текущую дату в формате ГГГГ- ММ-ДД: SELECT CURDATE(); /* Выведет: 2009-09-21 */ SELECT CURRENT_DATE(); /* Выведет: 2009-09-21 */ □ UTC_DATE() позволяет определить текущую дату по Гринвичу в формате ГГГГ-ММ-ДД: SELECT UTC_DATE(); /* Выведет: 2009-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'); /* Выведет: 2009-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); /* Выведет: 2009-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); /* Выведет: 2009-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); /* Выведет: 2011-09-21 22:36:43 */ • YEAR_MONTH — год и месяц (формат 'ГГ-ММ'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '2-2' YEAR_MONTH); /* Выведет: 2011-11-21 22:36:43 */ • MONTH — месяц: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 3 MONTH); /* Выведет: 2009-12-21 22:36:43 */ • DAY — день: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 6 DAY); /* Выведет: 2009-09-27 22:36:43 */ • DAY_HOUR — день и час (формат 'ДД ЧЧ'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '6 3' DAY_HOUR); /* Выведет: 2009-09-28 01:36:43 */ • DAY_MINUTE — день, час и минуты (формат 'ДД ЧЧ:ММ'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '6 3:5' DAY_MINUTE); /* Выведет: 2009-09-28 01:41:43 */ • DAY_SECOND — день, час, минуты и секунды (формат 'ДД ЧЧ:ММ:СС'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '6 3:5:15' DAY_SECOND); /* Выведет: 2009-09-28 01:41:58 */ • DAY_MICROSECOND — день, час, минуты, секунды и микросекунды (формат 'ДД ЧЧ:ММ:СС.XXXXXX'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '6 3:5:15.10' DAY_MICROSECOND); /* Выведет: 2009-09-28 01:41:58.100000 */ • HOUR — час: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 3 HOUR); /* Выведет: 2009-09-22 01:36:43 */ • HOUR_MINUTE — час и минуты (формат 'ЧЧ:ММ'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '3:7' HOUR_MINUTE); /* Выведет: 2009-09-22 01:43:43 */ • HOUR_SECOND — час, минуты и секунды (формат 'ЧЧ:ММ:СС'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '3:7:15' HOUR_SECOND); /* Выведет: 2009-09-22 01:43:58 */ • HOUR_MICROSECOND — час, минуты, секунды и микросекунды (формат 'ЧЧ:ММ:СС.XXXXXX'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '3:7:15.10' HOUR_MICROSECOND); /* Выведет: 2009-09-22 01:43:58.100000 */ • MINUTE — минуты: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 8 MINUTE); /* Выведет: 2009-09-21 22:44:43 */ • MINUTE_SECOND — минуты и секунды (формат 'ММ:СС'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '3:7' MINUTE_SECOND); /* Выведет: 2009-09-21 22:39:50 */ • MINUTE_MICROSECOND — минуты, секунды и микросекунды (формат 'ММ:СС.XXXXXX'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '3:7.11' MINUTE_MICROSECOND); /* Выведет: 2009-09-21 22:39:50.110000 */ • SECOND — секунды: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 15 SECOND); /* Выведет: 2009-09-21 22:36:58 */ • SECOND_MICROSECOND — секунды и микросекунды (формат 'СС.XXXXXX'): SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL '15.123456' SECOND_MICROSECOND); /* Выведет: 2009-09-21 22:36:58.123456 */ • MICROSECOND — микросекунды: SELECT ADDDATE('2009-09-21 22:36:43', INTERVAL 123456 MICROSECOND); /* Выведет: 2009-09-21 22:36:43.123456 */ Кроме того, функции ADDDATE() и SUBDATE() можно применять в сокращенном формате, описанном далее; □ ADDDATE(<Дата>, <Интервал в днях>) прибавляет к параметру <Дата> временной интервал в днях. Если указать перед интервалом знак -, то интервал вычитается из даты: SELECT ADDDATE('2009-09-21', 10); /* Выведет: 2009-10-01 */ SELECT ADDDATE('2009-09-21', -10); /* Выведет: 2009-09-11 */ □ SUBDATE(<Дата>, <Интервал в днях>) вычитает из параметра <Дата> временной интервал в днях. Если указать перед интервалом знак -, то интервал прибавляется к дате: SELECT SUBDATE('2009-09-21', 10); /* Выведет: 2009-09-11 */ SELECT SUBDATE('2009-09-21', -10); /* Выведет: 2009-10-01 */ □ ADDTIME(<Дата>, <Время>) прибавляет к параметру <Дата> временной интервал: SELECT ADDTIME('2009-09-21 22:36:43', '12:52:35'); /* Выведет: 2009-09-22 11:29:18 */ □ SUBTIME(<Дата>, <Время>) вычитает из параметра <Дата> временной ин- тервал: SELECT SUBTIME('2009-09-21 22:36:43', '12:52:35'); /* Выведет: 2009-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'); /* Выведет: 2009-09-22 02:36:43 */ □ LAST_DAY(<Дата>) возвращает дату в формате ГГГГ-ММ-ДД, в которой день выставлен на последний день текущего месяца: SELECT LAST_DAY('2009-09-21 22:36:43'); /* Выведет: 2009-09-30 */ □ MAKETIME(<Часы>, <Минуты>, <Секунды>) возвращает время в формате ЧЧ:ММ:СС: SELECT MAKETIME(12, 52, 35); /* Выведет: 12:52:35 */ □ TIMESTAMP(<Дата>, [<Время>]) возвращает дату в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС: SELECT TIMESTAMP('2009-09-21'); /* Выведет: 2009-09-21 00:00:00 */ SELECT TIMESTAMP('2009-09-21', '12:52:35'); /* Выведет: 2009-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; /* Выведет: 2009-09-22 01:43:58 */ SELECT '2009-09-21 22:36:43' - INTERVAL '3:7:15' HOUR_SECOND; /* Выведет: 2009-09-21 19:29:28 */ Для форматирования даты и времени также предназначено несколько функций: □ DATE_FORMAT(<Дата>, <Формат>) форматирует дату в соответствии со строкой <Формат>: SELECT DATE_FORMAT('2009-09-21 22:36:43', '%d.%m.%Y'); /* Выведет: 21.09.2009 */ □ STR_TO_DATE(<Дата>, <Формат>) возвращает дату в форматах ГГГГ-ММ-ДД ЧЧ:ММ:СС или ГГГГ-ММ-ДД по дате, соответствующей строке <Формат>: SELECT STR_TO_DATE('21.09.2009 12:52:35', '%d.%m.%Y %H:%i:%s'); /* Выведет: 2009-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); /* Выведет: 2009-04-14 05:18:39 */ SELECT FROM_UNIXTIME(1239671919, '%d.%m.%Y'); /* Выведет: 14.04.2009 */ □ 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.2009 */ Параметр <Формат> в функциях форматирования может содержать следующие комбинации символов: □ %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 2009 */ SET lc_time_names = 'ru_RU'; SELECT DATE_FORMAT('2009-02-19 22:36:43', '%d %M %Y'); /* Выведет: 19 Февраля 2009 */
|