MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 を返すため、その点でも挙動に差はありません。

  1. 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

  2. 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文を使って、「日/月/年 時:分:秒」