Spec-Zone.ru › MySQL 8.4

13.2.8 Преобразование между типами дат и времени

В некоторой степени вы можете преобразовать значение из одного временного типа в другой. Однако могут произойти некоторые изменения значения или потеря информации. Во всех случаях преобразование между временными типами подчиняется диапазону допустимых значений для результирующего типа. Например, хотя значения DATE, DATETIME и TIMESTAMP могут быть указаны с помощью того же набора форматов, типы не все имеют одинаковый диапазон значений. Значения TIMESTAMP не могут быть раньше 1970 UTC или позже, чем '2038-01-19 03:14:07' UTC. Это означает, что такая дата, как '1968-01-01', будучи допустимой как значение DATE или DATETIME, не является допустимым значением TIMESTAMP и преобразуется в 0.

Преобразование значений DATE:

  • Преобразование в значение DATETIME или TIMESTAMP добавляет часть времени '00:00:00', поскольку значение DATE не содержит информации о времени.

  • Преобразование в значение TIME бесполезно; результатом является '00:00:00'.

Преобразование значений DATETIME и TIMESTAMP:

  • Преобразование в значение DATE учитывает дробные секунды и округляет часть времени. Например, '1999-12-31 23:59:59.499' становится '1999-12-31', а '1999-12-31 23:59:59.500' становится '2000-01-01'.

  • Преобразование в значение TIME отбрасывает часть даты, поскольку тип TIME не содержит информации о дате.

Для преобразования значений TIME в другие временные типы используется значение CURRENT_DATE() для части даты. Значение TIME интерпретируется как прошедшее время (а не время суток) и добавляется к дате. Это означает, что часть даты результата отличается от текущей даты, если значение времени находится вне диапазона от '00:00:00' до '23:59:59'.

Предположим, что текущая дата '2012-01-01'. Значения TIME '12:00:00', '24:00:00' и '-12:00:00', при преобразовании в значения DATETIME или TIMESTAMP, приводят к результатам '2012-01-01 12:00:00', '2012-01-02 00:00:00' и '2011-12-31 12:00:00' соответственно.

Преобразование TIME в DATE аналогично, но отбрасывает часть времени из результата: '2012-01-01', '2012-01-02' и '2011-12-31' соответственно.

Явное преобразование может использоваться для переопределения неявного преобразования. Например, при сравнении значений DATE и DATETIME значение DATE приводится к типу DATETIME путем добавления части времени '00:00:00'. Чтобы выполнить сравнение, игнорируя часть времени значения DATETIME вместо этого, используйте функцию CAST() следующим образом:

date_col = CAST(datetime_col AS DATE)

Преобразование значений TIME и DATETIME в числовой вид (например, путем добавления +0) зависит от того, содержит ли значение часть дробных секунд. TIME(N) или DATETIME(N) преобразуется в целое число, когда N равно 0 (или опущено), и в значение с DECIMAL десятичными знаками, когда N больше 0:

mysql> SELECT CURTIME(), CURTIME()+0, CURTIME(3)+0;
+-----------+-------------+--------------+
| CURTIME() | CURTIME()+0 | CURTIME(3)+0 |
+-----------+-------------+--------------+
| 09:28:00  |       92800 |    92800.887 |
+-----------+-------------+--------------+
mysql> SELECT NOW(), NOW()+0, NOW(3)+0;
+---------------------+----------------+--------------------+
| NOW()               | NOW()+0        | NOW(3)+0           |
+---------------------+----------------+--------------------+
| 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 |
+---------------------+----------------+--------------------+

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

Spec-Zone.ru

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