MySQL タイムスタンプの日付を日付パラメーターのみと比較する
-
MySQL の
DATE()vs.CAST()vs.CONVERT() - MySQL タイムスタンプの日付を日付パラメーターのみと比較する
-
DATE()を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する -
CAST()を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する -
CONVERT()を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する -
BETWEENを使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する
今日は、DATE()、CAST()、および CONVERT() 関数を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較します。
MySQL の DATE() vs. CAST() vs. CONVERT()
以下、各機能の簡単な紹介です。 ここ をクリックすると、それぞれの例をさらに見つけることもできます。
MySQL の DATE() メソッド
DATE() メソッドは、タイムスタンプまたは DateTime 式から日付部分を抽出します。 パラメータは、DATE、TIMESTAMP、または DATETIME タイプでなければなりません。
渡された引数が上記の型以外に属する場合、NULL を返します。 この機能は、MySQL バージョン 4.0 以降を使用している場合に使用できます。
MySQL の CONVERT() メソッド
CONVERT() メソッドは、特定の値を指定されたデータ型に変換します。 たとえば、TIMESTAMP 型の値を DATE 型に変換できます。
2つのパラメーターが必要で、両方とも必須です。 最初のパラメーターは変換される値で、もう 1つは指定された値が変換されるデータ型です。
MySQL バージョン 4.0 以降で使用できます。
MySQL の CAST() メソッド
CAST() メソッドは、上で説明した CONVERT() に似ています。 これを使用して、あるデータ型の値を別のデータ型に変換します。
たとえば、DateTime の値を DATE 型に変換する場合。 CONVERT() メソッドと同様に、これも 2つの値を取ります: 変換する値と変換したいデータ型です。
MySQL バージョン 4.0 以降があれば、この関数を使用できます。
MySQL タイムスタンプの日付を日付パラメーターのみと比較する
MySQL タイムスタンプの日付を日付パラメーターのみと比較するには、ID と COL_DATETIME の 2つの属性を持つ date_comparison という名前のテーブルを作成します。 ここで、ID は int 型、COL_DATETIME は TIMESTAMP です。
次のクエリを使用してこのテーブルを作成し、このチュートリアルに従うこともできます。
例:
# Create a table
CREATE TABLE date_comparison(
ID INT NOT NULL AUTO_INCREMENT,
COL_DATETIME TIMESTAMP NOT NULL,
PRIMARY KEY (ID));
# Insert data
INSERT INTO date_comparison(col_datetime)
VALUES
('2001-11-15 09:50:00'),
('2006-08-09 04:30:00'),
('2001-11-15 23:30:00'),
('2005-06-03 06:22:11'),
('2004-01-01 21:42:17');
# Show all data
SELECT * FROM date_comparison;
出力:
+----+---------------------+
| ID | col_datetime |
+----+---------------------+
| 1 | 2001-11-15 09:50:00 |
| 2 | 2006-08-09 04:30:00 |
| 3 | 2001-11-15 23:30:00 |
| 4 | 2005-06-03 06:22:11 |
| 5 | 2004-01-01 21:42:17 |
+----+---------------------+
5 rows in set (0.00 sec)
ここで、特定の日付のレコードを取得したいと考えています。 たとえば、日付 2005-06-03 のみ。 日付パラメーターを、TIMESTAMP 型のすべての col_datetime 列の値と比較する必要があります。
DATE() を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する
したがって、次のようにのみ、タイムスタンプの日付と日付パラメーターを比較できます。
例:
SELECT * FROM date_comparison WHERE DATE(col_datetime) = '2005-06-03';
出力:
+----+---------------------+
| ID | col_datetime |
+----+---------------------+
| 4 | 2005-06-03 06:22:11 |
+----+---------------------+
1 row in set (0.00 sec)
日付のみに注目する場合は、DATE() 関数を使用して col_datetime を日付に変換できます。
例:
SELECT ID, DATE(col_datetime) FROM date_comparison
WHERE DATE(col_datetime) = '2005-06-03';
出力:
+----+--------------------+
| ID | DATE(col_datetime) |
+----+--------------------+
| 4 | 2005-06-03 |
+----+--------------------+
1 row in set (0.00 sec)
CAST() を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する
CAST() 関数を使用して、タイムスタンプの日付を日付パラメーターのみと比較することもできます。
例:
SELECT ID, CAST(col_datetime AS DATE) FROM date_comparison
WHERE CAST(col_datetime AS DATE) = '2005-06-03';
出力:
+----+----------------------------+
| ID | CAST(col_datetime AS DATE) |
+----+----------------------------+
| 4 | 2005-06-03 |
+----+----------------------------+
1 row in set (0.00 sec)
CONVERT() を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する
CONVERT() 関数は、タイムスタンプと日付のみを比較することもできます。
例:
SELECT ID, CONVERT(col_datetime, DATE) FROM date_comparison
WHERE CONVERT(col_datetime, DATE) = '2005-06-03';
出力:
+----+-----------------------------+
| ID | CONVERT(col_datetime, DATE) |
+----+-----------------------------+
| 4 | 2005-06-03 |
+----+-----------------------------+
1 row in set (0.00 sec)
BETWEEN を使用して、MySQL タイムスタンプの日付を日付パラメーターのみと比較する
次のソリューションは、col_datetime 列のインデックスを使用できるため、col_datetime 列に (TIMESTAMP タイプの) インデックスがある場合に最も高速です。
例:
SELECT * FROM date_comparison
WHERE col_datetime
BETWEEN '2005-06-03 00:00:00' AND '2005-06-03 23:59:59';
出力:
+----+---------------------+
| ID | col_datetime |
+----+---------------------+
| 4 | 2005-06-03 06:22:11 |
+----+---------------------+
1 row in set (0.00 sec)
