2014-10-02 9 views
16

Я пытаюсь понять, что отличает значение типа DATE в MySQL. Вот некоторые вещи, которые я пытался:MySQL CAST as DATE

SELECT CAST('3' AS DATE); 
-- null 

SELECT CAST(3 AS DATE); 
-- null 

SELECT CAST('2014-07-01 19:00:01' AS DATE); 
-- 2014-07-01 

SELECT DATE('2014-07-01 19:00:01'); 
-- 2014-07-01 

SELECT CAST('2014-07-01' AS DATE); 
-- 2014-07-01 

SELECT DATE('2014-07-01'); 
-- 2014-07-01 

SELECT CAST('2014-07-50' AS DATE); 
-- null 

SELECT DATE('2014-07-50'); 
-- null 

SELECT DATE(''), CAST('' AS DATE), DATE(0), CAST(0 AS DATE); 
-- null, null, 0000-00-00, 0000-00-00 

Все, что я пытался, кажется, либо преобразовать его в null, если он недействителен или вернуть дату часть строки, если это действительная дата. Я даже пробовал даты со слэшами и другими форматами, такими же результатами.

В чем разница между использованием функции DATE(expr) и CAST(expr AS DATE)?

DATE(expr): Выделяет часть даты даты или выражения даты и времени expr.

CAST(expr AS type): CAST() функция принимает выражение любого типа и производит результирующее значение указанного типа, похожий на CONVERT()

Аналогичным образом, тот же самый вопрос может быть задан вопрос о времени с TIME(expr) и CAST(expr AS TIME).

+0

Я думаю, что это объясняет ваши пустые значения: «Если преобразовать„нулевой“строку даты к дате, CONVERT() и CAST() возвращает NULL и выдает предупреждение, когда включен режим NO_ZERO_DATE SQL. " Проверьте предупреждение с помощью «ПРЕДУПРЕЖДЕНИЙ»; https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html –

+0

Кроме того: «MySQL извлекает и отображает значения DATE в формате« YYYY-MM-DD ». Поддерживаемый диапазон:« 1000 От -01-01 'до' 9999-12-31 '". Вероятно, вы ищете DATETIME. https://dev.mysql.com/doc/refman/5.6/en/datetime.html –

+0

Независимо от того, есть ли у меня время или нет, я хочу знать разницу между использованием CAST (expr AS DATE) и DATE (expr) ', и я полагаю, что то же самое можно задать для времени:' TIME (expr) 'vs' CAST (expr AS TIME) '. Также я добавил свои результаты для нулевой даты. –

ответ