SQLで日付を比較するための基本と応用テクニック

SQLでの日付データの取り扱いについて、基本的な比較方法から高度な操作まで、実践的なコード例を交えて解説します。データベース別の違いも含めて、どのように使い分ければよいのでしょうか?

SQLの日付比較と操作の基礎知識

SQLの日付操作の基本
📅
日付データ型

DATE型、DATETIME型、TIMESTAMP型の特徴と使い分け

比較演算子

不等号や BETWEEN を使用した日付の比較方法

🔄
日付関数

DATEDIFF、DATE_ADD などの主要な日付操作関数

SQLの日付データ型と基本的な比較方法

データベースで日付を扱う際、まず重要なのはデータ型の選択です。主要なデータ型には以下のようなものがあります:

  • DATE型:日付のみを格納(YYYY-MM-DD)
  • DATETIME型:日付と時刻を格納(YYYY-MM-DD HH:MI:SS)
  • TIMESTAMP型:タイムゾーン情報を含む日時を格納

 

基本的な比較には不等号演算子(<, >, <=, >=)を使用します。以下は具体例です:


-- 特定の日付以降のデータを取得
SELECT * FROM orders 
WHERE order_date >= '2024-01-01'
-- 日付範囲を指定して取得
SELECT * FROM orders 
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'

SQLの日付差分計算とインターバル操作

日付の差分を計算するには、DATEDIFF関数を使用します。データベース製品によって構文が異なる場合があります:


-- MySQL/SQL Server
SELECT DATEDIFF(day, '2024-01-01', '2024-12-31') AS days_difference
-- Oracle
SELECT (date2 - date1) AS days_difference 
FROM dual
-- PostgreSQL
SELECT date2::date - date1::date AS days_difference

SQLで現在日時を基準とした日付比較テクニック

現在日時を基準とした比較は、多くのシステムで必要となる機能です。以下のような方法があります:


-- 直近24時間のデータを取得
SELECT * FROM logs 
WHERE log_time > DATEADD(hour, -24, CURRENT_TIMESTAMP)
-- 今月のデータを取得
SELECT * FROM transactions 
WHERE EXTRACT(YEAR_MONTH FROM transaction_date) = 
      EXTRACT(YEAR_MONTH FROM CURRENT_DATE)

SQLの日付フォーマット変換と比較時の注意点

日付の比較を行う際は、フォーマットの統一が重要です。各データベースには独自の変換関数があります:


-- MySQL
SELECT STR_TO_DATE('2024-01-01', '%Y-%m-%d')
-- SQL Server
SELECT CONVERT(datetime, '2024-01-01')
-- Oracle
SELECT TO_DATE('2024-01-01', 'YYYY-MM-DD')

SQLの日付比較におけるパフォーマンス最適化

大量のデータを扱う際のパフォーマンスを考慮した日付比較の方法について説明します:

  • インデックスの活用
    
    CREATE INDEX idx_order_date ON orders(order_date)
    
  • 範囲検索の最適化
    
    -- 非効率な例
    SELECT * FROM orders 
    WHERE YEAR(order_date) = 2024
    -- 効率的な例
    SELECT * FROM orders 
    WHERE order_date >= '2024-01-01' 
    AND order_date < '2025-01-01'
    

 

参考リンク:
Microsoft公式ドキュメント - 日付と時刻のデータ型と関数