SQL Serverで日付を切り捨てる - 月単位、日単位、時間単位など、切り捨て精度を自在に操る
SQL Serverで日付を切り捨てる方法
CASTとFLOOR関数を使う
SELECT CAST(FLOOR(CAST(your_date_column AS float)) AS datetime)
FROM your_table;
この例では、your_date_column
の日付部分を切り捨てて、datetime
型に変換しています。
DATEADD関数を使う
SELECT DATEADD(your_date_column, DATEDIFF(your_date_column, FLOOR(your_date_column)), dd)
FROM your_table;
この例では、your_date_column
の日付部分を切り捨てた結果と、元の値との差を日数で計算し、DATEADD
関数を使って元の値に加算することで、日付部分を切り捨てた値を取得しています。
DATEFROMPARTS関数を使う
SELECT DATEFROMPARTS(YEAR(your_date_column), MONTH(your_date_column), DAY(your_date_column))
FROM your_table;
この例では、your_date_column
の年、月、日を取得し、DATEFROMPARTS
関数を使って日付部分を切り捨てた値を取得しています。
CONVERT関数を使う
SELECT CONVERT(VARCHAR(10), your_date_column, 111)
FROM your_table;
この例では、your_date_column
を yyyy-MM-dd
の形式に変換することで、日付部分を切り捨てた値を取得しています。
どの方法を使うべきかは、状況によって異なります。一般的には、CASTとFLOOR関数を使う方法 が最もシンプルで効率的です。ただし、your_date_column
の値が NULL
の場合、この方法はエラーになる可能性があります。その場合は、DATEADD関数を使う方法 または DATEFROMPARTS関数を使う方法 を使用してください。
上記以外にも、日付を切り捨てる方法はいくつかあります。詳しくは、以下のサイトを参照してください。
補足
- 上記の例では、
your_date_column
という名前の列を使用していますが、実際には任意の名前の列を使用することができます。 - 切り捨てたい日付の精度に応じて、
FLOOR
関数の引数を変更することができます。例えば、月単位で切り捨てたい場合は、FLOOR(your_date_column, dd)
とします。
-- テーブル作成
CREATE TABLE your_table (
your_date_column datetime
);
-- データ挿入
INSERT INTO your_table (your_date_column)
VALUES ('2024-04-05 12:34:56.789');
-- 日付を切り捨てる
SELECT
CAST(FLOOR(CAST(your_date_column AS float)) AS datetime) AS '切り捨てた日付',
DATEADD(your_date_column, DATEDIFF(your_date_column, FLOOR(your_date_column)), dd) AS 'DATEADD関数による切り捨て',
DATEFROMPARTS(YEAR(your_date_column), MONTH(your_date_column), DAY(your_date_column)) AS 'DATEFROMPARTS関数による切り捨て',
CONVERT(VARCHAR(10), your_date_column, 111) AS 'CONVERT関数による切り捨て'
FROM your_table;
切り捨てた日付 | DATEADD関数による切り捨て | DATEFROMPARTS関数による切り捨て | CONVERT関数による切り捨て
-----------------|-------------------------|---------------------------------|-------------------------
2024-04-05 00:00:00.000 | 2024-04-05 00:00:00.000 | 2024-04-05 00:00:00.000 | 2024-04-05
このサンプルコードは、your_date_column
という名前の列に格納されている日付を切り捨てて、さまざまな方法で結果を出力します。
実行方法
- SQL Server Management Studio (SSMS) を起動します。
- 新しいクエリウィンドウを開きます。
- 上記のサンプルコードをクエリウィンドウに貼り付けます。
F5
キーを押してクエリを実行します。- 出力結果を確認します。
日付を切り捨てるその他の方法
SELECT your_date_column - DATEDIFF(your_date_column, FLOOR(your_date_column), dd)
FROM your_table;
この例では、DATEDIFF
関数を使って、your_date_column
の日付部分と切り捨てた日付部分との差を日数で計算し、元の値から差を引くことで、日付部分を切り捨てた値を取得しています。
CASE式を使う
SELECT CASE WHEN HOUR(your_date_column) = 0
THEN your_date_column
ELSE DATEADD(your_date_column, -HOUR(your_date_column), hh)
END
FROM your_table;
この例では、CASE
式を使って、your_date_column
の時間部分が0の場合はそのまま、そうでない場合は時間部分を0にして日付部分を切り捨てた値を取得しています。
T-SQL の拡張機能を使う
日付を切り捨てるための T-SQL の拡張機能もいくつかあります。例えば、以下の拡張機能があります。
これらの拡張機能を使うと、より簡単に日付を切り捨てることができます。
sql-server t-sql