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 ', а также эквиваленты синтаксиса ODBC. Результирующее значение включает заключительную дробную часть секунды, если она указана. Ранее ключевое слово временного типа игнорировалось, и эти конструкции производили строковое значение. См. Стандартные SQL и ODBC литералы даты и времениstr'
© 2025 Oracle
Licensed under the GPLv2 License.