Функции даты и времени

Опубликовал: Суббота, Март 31, 2012 в категории HTML | Пока нет комментариев

Для получения текущей даты и времени используются следующие функции:

? 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) — (Профессиональное программирование)

Add to Social Bookmarks
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • BobrDobr
  • Mr. Wong
  • Yandex.Bookmarks
  • Text 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Pisali
  • SMI 2
  • Moe Mesto
  • 100 Zakladok
  • Vaau!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>