Spec-Zone.ru › MySQL 5.7

9.1.3 Литералы дат и времени

  • Стандартные SQL и ODBC литералы дат и времени

  • Строковые и числовые литералы в контексте дат и времени

Значения дат и времени могут быть представлены в нескольких форматах, таких как строковые значения в кавычках или числа, в зависимости от точного типа значения и других факторов. Например, в контекстах, где MySQL ожидает дату, он интерпретирует любое из '2015-07-21', '20150721' и 20150721 как дату.

В этом разделе описываются допустимые форматы литералов дат и времени. Более подробную информацию о типах временных данных, таких как диапазон допустимых значений, см. в разделе 11.2 «Типы данных дат и времени».

Стандартные SQL и ODBC литералы дат и времени

Стандартный SQL требует, чтобы временные литералы были указаны с использованием ключевого слова типа и строки. Пробел между ключевым словом и строкой является необязательным.

DATE 'str'
TIME 'str'
TIMESTAMP 'str'

MySQL распознает, но, в отличие от стандартного SQL, не требует ключевого слова типа. Приложения, которые должны соответствовать стандарту, должны включать ключевое слово типа для временных литералов.

MySQL также распознает синтаксис ODBC, соответствующий синтаксису стандартного SQL:

{ d 'str' }
{ t 'str' }
{ ts 'str' }

MySQL использует ключевые слова типа и конструкции ODBC для получения DATE, TIME и DATETIME значений соответственно, включая конечную дробную часть секунды, если она указана. Синтаксис TIMESTAMP производит значение DATETIME в MySQL, потому что DATETIME имеет диапазон, который более тесно соответствует стандартному SQL-типу TIMESTAMP, который имеет диапазон лет от 0001 до 9999. (Диапазон лет MySQL TIMESTAMP составляет от 1970 до 2038.)

Строковые и числовые литералы в контексте даты и времени

MySQL распознает значения DATE в следующих форматах:

  • В виде строки в формате 'YYYY-MM-DD' или 'YY-MM-DD'. Разрешен «расслабленный» синтаксис: любой знак препинания может использоваться в качестве разделителя между частями даты. Например, '2012-12-31', '2012/12/31', '2012^12^31' и '2012@12@31' эквивалентны.

  • В виде строки без разделителей в формате 'YYYYMMDD' или 'YYMMDD', при условии, что строка имеет осмысленный вид даты. Например, '20070523' и '070523' интерпретируются как '2007-05-23', но '071332' является недопустимой (она содержит бессмысленные части месяца и дня) и становится '0000-00-00'.

  • В виде числа в формате YYYYMMDD или YYMMDD, при условии, что число имеет осмысленный вид даты. Например, 19830905 и 830905 интерпретируются как '1983-09-05'.

MySQL распознает значения DATETIME и TIMESTAMP в следующих форматах:

  • В виде строки в формате 'YYYY-MM-DD hh:mm:ss' или 'YY-MM-DD hh:mm:ss'. Здесь также разрешен «расслабленный» синтаксис: любой знак препинания может использоваться в качестве разделителя между частями даты или времени. Например, '2012-12-31 11:30:45', '2012^12^31 11+30+45', '2012/12/31 11*30*45' и '2012@12@31 11^30^45' эквивалентны.

    Единственным разделителем, распознаваемым между частью даты/времени и частью дробных секунд, является десятичная точка.

    Части даты и времени могут быть разделены T вместо пробела. Например, '2012-12-31 11:30:45' и '2012-12-31T11:30:45' эквивалентны.

  • В виде строки без разделителей в формате 'YYYYMMDDhhmmss' или 'YYMMDDhhmmss', при условии, что строка имеет осмысленный вид даты. Например, '20070523091528' и '070523091528' интерпретируются как '2007-05-23 09:15:28', но '071122129015' недопустима (она имеет бессмысленную часть минут) и становится '0000-00-00 00:00:00'.

  • В виде числа в формате YYYYMMDDhhmmss или YYMMDDhhmmss, при условии, что число имеет осмысленный вид даты. Например, 19830905132800 и 830905132800 интерпретируются как '1983-09-05 13:28:00'.

Значение DATETIME или TIMESTAMP может включать конечную дробную часть секунд с точностью до микросекунд (6 цифр). Дробная часть всегда отделяется от остальной части времени десятичной точкой; другие разделители дробных секунд не распознаются. Подробности о поддержке дробных секунд в MySQL см. в Разделе 11.2.7, «Дробные секунды в значениях времени».

Даты, содержащие двухзначные значения года, являются неоднозначными, поскольку век неизвестен. MySQL интерпретирует двухзначные значения года по следующим правилам:

  • Значения года в диапазоне 70-99 становятся 1970-1999.

  • Значения года в диапазоне 00-69 становятся 2000-2069.

См. также Раздел 11.2.10, «Двухзначные годы в датах».

Для значений, заданных как строки, включающие разделители частей даты, не требуется указывать две цифры для значений месяца или дня, которые меньше 10. '2015-6-9' эквивалентно '2015-06-09'. Аналогично, для значений, заданных как строки, включающие разделители частей времени, не требуется указывать две цифры для значений часов, минут или секунд, которые меньше 10. '2015-10-30 1:2:3' эквивалентно '2015-10-30 01:02:03'.

Значения, заданные как числа, должны иметь длину 6, 8, 12 или 14 цифр. Если число имеет длину 8 или 14 цифр, предполагается, что оно находится в формате YYYYMMDD или YYYYMMDDhhmmss, и год задается первыми 4 цифрами. Если число имеет длину 6 или 12 цифр, предполагается, что оно находится в формате YYMMDD или YYMMDDhhmmss, и год задается первыми 2 цифрами. Числа, не имеющие одной из этих длин, интерпретируются так, как будто дополнены ведущими нулями до ближайшей длины.

Значения, заданные как строки без разделителей, интерпретируются в зависимости от их длины. Для строки длиной 8 или 14 символов год предполагается заданным первыми 4 символами. В противном случае год предполагается заданным первыми 2 символами. Строка интерпретируется слева направо для определения значений года, месяца, дня, часа, минуты и секунды, сколько частей присутствуют в строке. Это означает, что вы не должны использовать строки, имеющие менее 6 символов. Например, если вы укажете '9903', предполагая, что это март 1999 года, MySQL преобразует это в значение даты «ноль». Это происходит потому, что значения года и месяца являются 99 и 03, но часть дня полностью отсутствует. Однако вы можете явно указать значение ноль для представления отсутствующих частей месяца или дня. Например, чтобы вставить значение '1999-03-00', используйте '990300'.

MySQL распознает значения TIME в следующих форматах:

  • В виде строки в формате 'D hh:mm:ss'. Вы также можете использовать один из следующих «расслабленных» синтаксисов: 'hh:mm:ss', 'hh:mm', 'D hh:mm', 'D hh' или 'ss'. Здесь D представляет дни и может иметь значение от 0 до 34.

  • В виде строки без разделителей в формате 'hhmmss', при условии, что это имеет смысл как время. Например, '101112' понимается как '10:11:12', но '109712' недопустимо (имеет бессмысленную часть минут) и становится '00:00:00'.

  • В виде числа в формате hhmmss, при условии, что это имеет смысл как время. Например, 101112 понимается как '10:11:12'. Также поддерживаются следующие альтернативные форматы: ss, mmss или hhmmss.

Конечная дробная часть секунд распознается в форматах времени 'D hh:mm:ss.fraction', 'hh:mm:ss.fraction', 'hhmmss.fraction' и hhmmss.fraction, где fraction - дробная часть с точностью до микросекунд (6 цифр). Дробная часть всегда отделяется от остальной части времени десятичной точкой; другие разделители дробных секунд не распознаются. Подробности о поддержке дробных секунд в MySQL см. в Разделе 11.2.7, «Дробные секунды в значениях времени».

Для значений TIME, заданных как строки, включающие разделители частей времени, не нужно указывать две цифры для значений часов, минут или секунд, которые меньше 10. '8:3:2' эквивалентно '08:03:02'.

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

Spec-Zone.ru

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