Spec-Zone .ru
спецификации, руководства, описания, API

11.3.7. Преобразование Между Типами Даты и Времени

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

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

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

Для преобразования 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 (или опущено) и к a DECIMAL значение с N десятичные цифры, когда 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 |+---------------------+----------------+--------------------+