SQL Server で DATETIME と DATE を比較:CAST と CONVERT 関数でスマート変換
SQL Server で DATETIME と DATE を比較して時間部分を無視する方法
DATE 関数を使用する
最も単純な方法は、DATE
関数を使用して、DATETIME
型の値から日付部分のみを抽出することです。
SELECT *
FROM your_table
WHERE DATE(your_datetime_column) = your_date_column;
このクエリは、your_datetime_column
列の日付部分が your_date_column
列と一致するすべてのレコードを選択します。
FLOOR
関数を使用して、DATETIME
型の値を小数点以下切り捨てし、日付部分のみを取得することもできます。
SELECT *
FROM your_table
WHERE FLOOR(your_datetime_column) = your_date_column;
CAST
関数を使用して、DATETIME
型の値を DATE
型に明示的に変換することもできます。
SELECT *
FROM your_table
WHERE CAST(your_datetime_column AS DATE) = your_date_column;
SELECT *
FROM your_table
WHERE CONVERT(DATE, your_datetime_column) = your_date_column;
例
以下の例では、your_table
テーブルに your_datetime_column
という DATETIME
型の列と your_date_column
という DATE
型の列があると仮定します。
CREATE TABLE your_table (
your_datetime_column DATETIME,
your_date_column DATE
);
INSERT INTO your_table VALUES (
'2024-05-13 10:20:30',
'2024-05-13'
);
SELECT *
FROM your_table
WHERE DATE(your_datetime_column) = your_date_column;
このクエリは、your_table
テーブルから your_datetime_column
列の日付部分が 2024-05-13
であるすべてのレコードを返します。
補足
- 上記の方法は、SQL Server 以外の他のデータベースシステムでも同様に使用できます。
- 複雑なクエリの場合は、複数の方法を組み合わせて使用することもできます。
CREATE TABLE your_table (
your_datetime_column DATETIME,
your_date_column DATE
);
INSERT INTO your_table VALUES (
'2024-05-13 10:20:30',
'2024-05-13'
);
-- DATE 関数を使用する
SELECT *
FROM your_table
WHERE DATE(your_datetime_column) = your_date_column;
-- FLOOR 関数を使用する
SELECT *
FROM your_table
WHERE FLOOR(your_datetime_column) = your_date_column;
-- CAST 関数を使用する
SELECT *
FROM your_table
WHERE CAST(your_datetime_column AS DATE) = your_date_column;
-- CONVERT 関数を使用する
SELECT *
FROM your_table
WHERE CONVERT(DATE, your_datetime_column) = your_date_column;
このコードは以下の結果を出力します。
your_datetime_column your_date_column
--------------------- ---------------
2024-05-13 10:20:30 2024-05-13
上記のように、すべての方法で同じ結果が得られます。 どの方法を使用するかは、個人の好みや状況によって異なります。
説明
- 次に、テーブルに 1 行のデータを挿入します。このデータには、
2024-05-13 10:20:30
というDATETIME
値と、2024-05-13
というDATE
値が含まれています。
- このコードは、SQL Server 2012 以降で使用できます。
- 他のデータベースシステムを使用している場合は、対応する構文を使用する必要があります。
SQL Server で DATETIME と DATE を比較して時間部分を無視するその他の方法
DATEDIFF
関数を使用して、2 つの日付の差を日数で計算することができます。この関数には、開始日と終了日、および比較する日付単位を指定する引数が必要です。
SELECT *
FROM your_table
WHERE DATEDIFF(DAY, your_datetime_column, your_date_column) = 0;
YEAR
関数、MONTH
関数、DAY
関数を使用して、日付の個々のコンポーネントを抽出することもできます。次に、これらのコンポーネントを比較して、日付部分が一致するかどうかを確認できます。
SELECT *
FROM your_table
WHERE YEAR(your_datetime_column) = YEAR(your_date_column)
AND MONTH(your_datetime_column) = MONTH(your_date_column)
AND DAY(your_datetime_column) = DAY(your_date_column);
CREATE TABLE your_table (
your_datetime_column DATETIME,
your_date_column DATE
);
INSERT INTO your_table VALUES (
'2024-05-13 10:20:30',
'2024-05-13'
);
-- DATEDIFF 関数を使用する
SELECT *
FROM your_table
WHERE DATEDIFF(DAY, your_datetime_column, your_date_column) = 0;
-- YEAR、MONTH、DAY 関数を使用する
SELECT *
FROM your_table
WHERE YEAR(your_datetime_column) = YEAR(your_date_column)
AND MONTH(your_datetime_column) = MONTH(your_date_column)
AND DAY(your_datetime_column) = DAY(your_date_column);
your_datetime_column your_date_column
--------------------- ---------------
2024-05-13 10:20:30 2024-05-13
DATEDIFF
関数は、日付の差を計算する際に精度が低くなる可能性があることに注意してください。これは、関数内部で四捨五入が行われるためです。YEAR
関数、MONTH
関数、DAY
関数を使用する方法は、DATEDIFF
関数よりも精度が高くなります。
sql sql-server t-sql