Spec-Zone .ru
спецификации, руководства, описания, API
|
До некоторой степени можно преобразовать значение от одного временного типа до другого. Однако, может быть
некоторое изменение значения или потеря информации. Во всех случаях преобразование между временными типами
подвергается диапазону допустимых значений для получающегося типа. Например, хотя 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
значения к другим временным типам являются определенной версией:
С MySQL 5.6.4, значения 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'
, соответственно.
Прежде 5.6.4, MySQL преобразовывает временную стоимость в дату или значение "дата
и время", анализируя строковое значение времени как дата или "дата и время". Это вряд ли
будет полезно. Например, '23:12:31'
интерпретируемый, поскольку дата
становится '2032-12-31'
. Временные стоимости, не допустимые как даты,
становятся '0000-00-00'
или NULL
.
Явное преобразование может использоваться, чтобы переопределить неявное преобразование. Например, по сравнению с
DATE
и DATETIME
значения, DATE
значение принуждается к DATETIME
тип, добавляя часть времени '00:00:00'
.
Выполнять сравнение, игнорируя часть времени DATETIME
значение вместо этого, используйте CAST()
функция следующим образом:
date_col
= CAST(datetime_col
AS DATE)
Преобразование TIME
и DATETIME
значения к числовой форме (например, добавляя +0
)
происходит следующим образом:
С MySQL 5.6.4, 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 |+---------------------+----------------+--------------------+
Перед MySQL 5.6.4 преобразование приводит к значению двойной точности с частью
микросекунд .000000
:
mysql>SELECT CURTIME(), CURTIME()+0;
+-----------+--------------+| CURTIME() | CURTIME()+0 |+-----------+--------------+| 09:28:00 | 92800.000000 |+-----------+--------------+mysql>SELECT NOW(), NOW()+0;
+---------------------+-----------------------+| NOW() | NOW()+0 |+---------------------+-----------------------+| 2012-08-15 09:28:00 | 20120815092800.000000 |+---------------------+-----------------------+