私は、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)
を使用して、時間について同じ質問をすることができます。
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