2014-10-02 132 views
16

我想知道在MySQL中DATE类型的值是什么。这里有一些事情我已经尝试:MySQL CAST as date 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模式启用时产生警告。“用“SHOW WARNINGS;”检查警告 https://dev.mysql.com/doc/refman/5.6/en/cast-functions.html – 2014-10-02 17:14:00

+0

此外:“MySQL检索并显示'YYYY-MM-DD'格式的DATE值,支持的范围是'1000 -01-01'至'9999-12-31'“。您可能正在寻找DATETIME。 https://dev.mysql.com/doc/refman/5.6/en/datetime.html – 2014-10-02 17:15:12

+0

无论我是否有次,我想知道使用'CAST(expr AS DATE)'和'DATE (expr)',我想可以用相同的时间:'TIME(expr)'和'CAST(expr AS TIME)'。此外,我还添加了零日期的结果。 – 2014-10-02 17:21:38

回答