web-dev-qa-db-ja.com

日付としてのMySQL CAST

私は、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):日付または日付時刻式exprの日付部分を抽出します。

CAST(expr AS type)CAST()関数は、任意のタイプの式を取り、CONVERT()と同様に、指定されたタイプの結果値を生成します

同様に、TIME(expr)CAST(expr AS TIME)を使用して、時間について同じ質問をすることができます。

26

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

31