Я пытаюсь понять, что отличает значение типа 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)
.
Я думаю, что это объясняет ваши пустые значения: «Если преобразовать„нулевой“строку даты к дате, CONVERT() и CAST() возвращает NULL и выдает предупреждение, когда включен режим NO_ZERO_DATE SQL. " Проверьте предупреждение с помощью «ПРЕДУПРЕЖДЕНИЙ»; https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html –
Кроме того: «MySQL извлекает и отображает значения DATE в формате« YYYY-MM-DD ». Поддерживаемый диапазон:« 1000 От -01-01 'до' 9999-12-31 '". Вероятно, вы ищете DATETIME. https://dev.mysql.com/doc/refman/5.6/en/datetime.html –
Независимо от того, есть ли у меня время или нет, я хочу знать разницу между использованием CAST (expr AS DATE) и DATE (expr) ', и я полагаю, что то же самое можно задать для времени:' TIME (expr) 'vs' CAST (expr AS TIME) '. Также я добавил свои результаты для нулевой даты. –