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
значения к другим временным типам, значение 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 |+---------------------+----------------+--------------------+