13.2.1 Синтаксис типа данных Дата и Время
Типы данных дата и время для представления временных значений — это DATE, TIME, DATETIME, TIMESTAMP и YEAR.
Для диапазонов значений DATE и DATETIME, “поддерживаемые” означает, что, хотя более ранние значения могут работать, нет гарантий.
MySQL разрешает дробные секунды для значений TIME, DATETIME и TIMESTAMP, с точностью до микросекунд (6 цифр). Для определения столбца, включающего дробную часть секунды, используйте синтаксис , где type_name(fsp)type_name — TIME, DATETIME или TIMESTAMP, а fsp — точность дробных секунд. Например:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
Значение fsp, если указано, должно быть в диапазоне от 0 до 6. Значение 0 означает, что дробной части нет. Если значение опущено, то точность по умолчанию равна 0. (Это отличается от стандартного значения SQL по умолчанию 6, для совместимости с предыдущими версиями MySQL.)
Любой столбец TIMESTAMP или DATETIME в таблице может иметь свойства автоматической инициализации и обновления; см. Раздел 13.2.5, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME».
-
Дата. Поддерживаемый диапазон —
'1000-01-01'до'9999-12-31'. MySQL отображает значенияDATEв формате', но разрешает присваивание значений столбцамYYYY-MM-DD'DATEс использованием строк или чисел. -
Комбинация даты и времени. Поддерживаемый диапазон —
'1000-01-01 00:00:00.000000'до'9999-12-31 23:59:59.499999'. MySQL отображает значенияDATETIMEв формате', но разрешает присваивание значений столбцамYYYY-MM-DD hh:mm:ss[.fraction]'DATETIMEс использованием строк или чисел.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробных секунд. Значение 0 означает, что дробной части нет. Если значение опущено, то точность по умолчанию равна 0.Автоматическая инициализация и обновление текущей даты и времени для столбцов
DATETIMEмогут быть заданы с помощьюDEFAULTиON UPDATE, как описано в Разделе 13.2.5, «Автоматическая инициализация и обновление для TIMESTAMP и DATETIME». -
Отметка времени. Диапазон —
'1970-01-01 00:00:01.000000'UTC до'2038-01-19 03:14:07.499999'UTC. ЗначенияTIMESTAMPхранятся как количество секунд с момента эпохи ('1970-01-01 00:00:00'UTC). ЗначениеTIMESTAMPне может представлять значение'1970-01-01 00:00:00', потому что оно эквивалентно 0 секундам с момента эпохи, а значение 0 зарезервировано для представления значения'0000-00-00 00:00:00', значения “ноль”TIMESTAMP.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробных секунд. Значение 0 означает, что дробной части нет. Если значение опущено, то точность по умолчанию равна 0.Обработка определений
TIMESTAMPсервером зависит от значения системной переменнойexplicit_defaults_for_timestamp(см. Раздел 7.1.8, «Системные переменные сервера»).Если
explicit_defaults_for_timestampвключено, то автоматическое присваивание атрибутовDEFAULT CURRENT_TIMESTAMPилиON UPDATE CURRENT_TIMESTAMPлюбому столбцуTIMESTAMPне выполняется. Их необходимо включить явно в определение столбца. Кроме того, любой столбецTIMESTAMP, не явно объявленный какNOT NULL, разрешает значенияNULL.Если
explicit_defaults_for_timestampвыключено, сервер обрабатываетTIMESTAMPследующим образом:Если не указано иное, первый столбец
TIMESTAMPв таблице определяется как автоматически устанавливаемый на дату и время последнего изменения, если ему не присвоено явно значение. Это делаетTIMESTAMPполезным для записи метки времени операцииINSERTилиUPDATE. Также любой столбецTIMESTAMPможно установить на текущую дату и время, присвоив ему значениеNULL, если он не определен с атрибутомNULL, разрешающим значенияNULL.Автоматическую инициализацию и обновление текущей даты и времени можно задать с помощью
DEFAULT CURRENT_TIMESTAMPиON UPDATE CURRENT_TIMESTAMP. По умолчанию первый столбецTIMESTAMPобладает этими свойствами, как отмечалось ранее. Однако любой столбецTIMESTAMPв таблице можно определить с этими свойствами. -
Время. Диапазон —
'-838:59:59.000000'до'838:59:59.000000'. MySQL отображает значенияTIMEв формате', но разрешает присваивание значений столбцамhh:mm:ss[.fraction]'TIMEс использованием строк или чисел.Допускается необязательное значение
fspв диапазоне от 0 до 6 для указания точности дробных секунд. Значение 0 означает, что дробной части нет. Если значение опущено, то точность по умолчанию равна 0. -
Год в формате с 4 цифрами. MySQL отображает значения
YEARв форматеYYYY, но разрешает присваивание значений столбцамYEARс использованием строк или чисел. Значения отображаются как1901до2155, или0000.Дополнительную информацию о формате отображения
YEARи интерпретации входных значений см. в Разделе 13.2.4, «Тип YEAR».
Функции агрегирования SUM() и AVG() не работают с временными значениями. (Они преобразуют значения в числа, теряя всё после первой нечисловой буквы.) Чтобы обойти эту проблему, преобразуйте в числовые единицы, выполните агрегирующую операцию и преобразуйте обратно во временное значение. Примеры:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
© 2025 Oracle
Licensed under the GPLv2 License.