mysql - datatype - order by cast



MySQL CAST as DATE (1)

При проверке исходного кода MySQL 5.6 CAST() и Item_date_typecast DATE() Item_date_typecast к одной и той же внутренней функции Item_date_typecast , DATE() вызывает Item_date_typecast .

В заключение, нет никакой разницы между функцией DATE(expr) и CAST(expr AS DATE) .

Refs:

https://github.com/mysql/mysql-server/blob/5.6/sql/sql_yacc.yy

https://github.com/mysql/mysql-server/blob/5.6/sql/item_create.cc

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

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, если это допустимая дата. Я даже пробовал даты с косой чертой и другими форматами, такие же результаты.

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

DATE(expr) : извлекает часть даты из выражения date или datetime.

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

Точно так же один и тот же вопрос может быть задан для времен с TIME(expr) и CAST(expr AS TIME) .





casting