我试图了解在 MySQL 中将值转换为 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)
: Extracts the date part of the date or datetime expression expr.
CAST(expr AS type)
: TheCAST()
function takes an expression of any type and produces a result value of a specified type, similar toCONVERT()
同样的,同样的问题可以用 TIME(expr)
和 CAST(expr AS TIME)
来询问。
最佳答案
查看 MySQL 5.6 的源代码 CAST()
和 CONVERT()
调用相同的内部函数 Item_date_typecast
, DATE ()
也调用了 Item_date_typecast
。
总之DATE(expr)
函数和CAST(expr AS DATE)
之间没有区别。
引用:
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
关于MySQL CAST 作为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165882/