Spec-Zone.ru › MySQL 9.2

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».

  • DATE

    Дата. Поддерживаемый диапазон — '1000-01-01' до '9999-12-31'. MySQL отображает значения DATE в формате 'YYYY-MM-DD', но разрешает присваивание значений столбцам DATE с использованием строк или чисел.

  • DATETIME[(fsp)]

    Комбинация даты и времени. Поддерживаемый диапазон — '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».

  • TIMESTAMP[(fsp)]

    Отметка времени. Диапазон — '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 в таблице можно определить с этими свойствами.

  • TIME[(fsp)]

    Время. Диапазон — '-838:59:59.000000' до '838:59:59.000000'. MySQL отображает значения TIME в формате 'hh:mm:ss[.fraction]', но разрешает присваивание значений столбцам TIME с использованием строк или чисел.

    Допускается необязательное значение fsp в диапазоне от 0 до 6 для указания точности дробных секунд. Значение 0 означает, что дробной части нет. Если значение опущено, то точность по умолчанию равна 0.

  • YEAR[(4)]

    Год в формате с 4 цифрами. MySQL отображает значения YEAR в формате YYYY, но разрешает присваивание значений столбцам YEAR с использованием строк или чисел. Значения отображаются как 1901 до 2155, или 0000.

    Дополнительную информацию о формате отображения YEAR и интерпретации входных значений см. в Разделе 13.2.4, «Тип YEAR».

    Примечание

    Тип данных YEAR(4) с явной шириной отображения устарел; ожидается, что поддержка будет удалена в будущих версиях MySQL. Вместо этого используйте 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;
END_OF_DOCUMENT_MARKER

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/date-and-time-type-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API