MySQLのCAST(...) AS DATEとDATE()関数に違いはない?検証付きで解説
結論から述べると、MySQLでは CAST(x AS DATE) と DATE() 関数 の間に違いはありません。どちらも DATETIME 型の値から日付部分だけを取り出すために使用され、返される結果もパフォーマンスも同一です。
2つの構文の基本形
それぞれの構文は以下の通りです。
CAST(yourDateTimeColumnName AS DATE) DATE(yourDateTimeColumnName)
実は、これら2つの関数は内部で同じ処理(Item_date_typecast)を呼び出しています。つまり、どちらを選んでも動作はまったく同じというわけです。
検証用テーブルを作成する
それでは、実際に両者の挙動を確認してみましょう。まずはテスト用のテーブルを作成します。
mysql> create table CastAsDateDemo -> ( -> Id int NOT NULL AUTO_INCREMENT, -> ArrivalTime datetime, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.71 sec)
テストデータを挿入する
続いて、INSERT文で複数のレコードを登録します。
mysql> insert into CastAsDateDemo(ArrivalTime) values('2014-1-13 13:45:46');
Query OK, 1 row affected (0.16 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values('2016-4-11 10:30:31');
Query OK, 1 row affected (0.48 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values('2019-1-9 19:17:49');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CastAsDateDemo(ArrivalTime) values(date_add(now(), interval 2 day));
Query OK, 1 row affected (0.15 sec)
登録済みデータを確認する
SELECT文ですべてのレコードを表示します。
mysql> select * from CastAsDateDemo;
実行結果は以下のようになります。
+----+---------------------+ | Id | ArrivalTime | +----+---------------------+ | 1 | 2014-01-13 13:45:46 | | 2 | 2016-04-11 10:30:31 | | 3 | 2019-01-09 19:17:49 | | 4 | 2019-01-11 19:17:59 | +----+---------------------+ 4 rows in set (0.00 sec)
CAST() を使って日付に変換する
まずは CAST() を使って、時刻情報を除いた日付部分だけを取得するクエリを実行します。
mysql> select cast(ArrivalTime as Date) as only_Date from CastAsDateDemo;
実行結果:
+------------+ | only_Date | +------------+ | 2014-01-13 | | 2016-04-11 | | 2019-01-09 | | 2019-01-11 | +------------+ 4 rows in set (0.00 sec)
DATE() 関数を使って日付に変換する
次に、DATE() 関数を使った場合のクエリです。
mysql> select date(ArrivalTime) as only_Date from CastAsDateDemo;
実行結果:
+------------+ | only_Date | +------------+ | 2014-01-13 | | 2016-04-11 | | 2019-01-09 | | 2019-01-11 | +------------+ 4 rows in set (0.00 sec)
まとめ
2つの実行結果を見比べると、まったく同じ日付が返されていることがわかります。これは、CAST(... AS DATE) と DATE() が内部で同一の型変換処理(Item_date_typecast)を行っているためです。
どちらを使うべきか迷った場合は、プロジェクトのコーディング規約やコードの可読性に合わせて選択すれば問題ありません。なお、NULL値が渡された場合はどちらの関数も NULL を返すため、その点でも挙動に差はありません。
-
MySQLで現在の日付に11日を追加する方法【DATE_ADD関数の使い方】
はじめにMySQLでは、DATE_ADD()関数を使うことで、日付に指定した日数を簡単に加算できます。本記事では、現在の日付(CURDATE())に11日を追加する方法を、テーブル作成からクエリ実行まで具体的な例を交えて解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1994 ( ArrivalDate date ); Query OK, 0 rows affected (5.33 sec)テストデータの挿入続いて、INSERTコマンドを使用してテーブルに複数のレコードを挿入します。mysql&g
-
MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説
MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」