Spec-Zone.ru › MySQL 5.7

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

В некоторой степени вы можете преобразовать значение из одного временного типа в другой. Однако может быть некоторое изменение значения или потеря информации. Во всех случаях преобразование между временными типами подчиняется диапазону допустимых значений для результирующего типа. Например, хотя 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-5.7-en/date-and-time-type-conversion.html

Spec-Zone.ru

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