Spec-Zone.ru › MySQL 8.4

13.2.6 Дробные секунды в значениях времени

MySQL поддерживает дробные секунды для значений TIME, DATETIME и TIMESTAMP с точностью до микросекунд (6 знаков):

  • Для определения столбца, включающего дробную часть секунды, используйте синтаксис type_name(fsp), где type_name — это TIME, DATETIME или TIMESTAMP, а fsp — точность дробных секунд. Например:

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
    

    Значение fsp, если указано, должно быть в диапазоне от 0 до 6. Значение 0 указывает, что дробной части нет. Если оно опущено, точность по умолчанию составляет 0. (Это отличается от стандартного значения SQL по умолчанию 6 для совместимости с предыдущими версиями MySQL.)

  • Вставка значения TIME, DATE или TIMESTAMP с дробной частью секунды в столбец того же типа, но с меньшим количеством знаков дробной части, приводит к округлению. Рассмотрим таблицу, созданную и заполненную следующим образом:

    CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );
    INSERT INTO fractest VALUES
    ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');
    

    Временные значения вставляются в таблицу с округлением:

    mysql> SELECT * FROM fractest;
    +-------------+------------------------+------------------------+
    | c1          | c2                     | c3                     |
    +-------------+------------------------+------------------------+
    | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 |
    +-------------+------------------------+------------------------+
    

    При таком округлении не выдается предупреждение или ошибка. Это поведение соответствует стандарту SQL.

    Для вставки значений с усечением вместо этого включите режим SQL TIME_TRUNCATE_FRACTIONAL:

    SET @@sql_mode = sys.list_add(@@sql_mode, 'TIME_TRUNCATE_FRACTIONAL');
    

    При включенном режиме SQL временные значения вставляются с усечением:

    mysql> SELECT * FROM fractest;
    +-------------+------------------------+------------------------+
    | c1          | c2                     | c3                     |
    +-------------+------------------------+------------------------+
    | 17:51:04.77 | 2018-09-08 17:51:04.77 | 2018-09-08 17:51:04.77 |
    +-------------+------------------------+------------------------+
    
  • Функции, принимающие временные аргументы, принимают значения с дробными секундами. Возвращаемые значения из временных функций включают дробные секунды, как соответствующим образом. Например, NOW() без аргумента возвращает текущую дату и время без дробной части, но принимает необязательный аргумент от 0 до 6, чтобы указать, что возвращаемое значение включает дробную часть секунд на это количество знаков.

  • Синтаксис временных литералов создает временные значения: DATE 'str', TIME 'str' и TIMESTAMP 'str', а также эквиваленты синтаксиса ODBC. Результирующее значение включает заключительную дробную часть секунды, если она указана. Ранее ключевое слово временного типа игнорировалось, и эти конструкции производили строковое значение. См. Стандартные SQL и ODBC литералы даты и времени

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/fractional-seconds.html

Spec-Zone.ru

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