Loading
  • LIGHT

  • DARK

ROUTE

ルートゼロの
アクティビティ

SQL日付関数の完全ガイド|現場で使えるテンプレ・失敗回避法も解説

4

「SQLの日付で集計したいけど、クエリがなかなか書けない…」
こんな壁にぶつかった経験、私たちエンジニアには“あるある”ですよね。
JOINGROUP BYは使いこなせても、日付関数は少し難しく感じることも多いですよね。
この記事で、つまずきやすいポイントを一緒に整理していきましょう。

用語解説:JOIN
複数のテーブルを結合し、関連するデータをまとめて取得するSQLの基本操作。

用語解説:GROUP BY
データを指定したカラムごとにグループ化し、集計処理(合計・件数など)を行うためのSQL句。

用語解説:日付関数
日付や時刻の値を取得・変換・計算するためのSQL関数群。DBMSごとに書き方や関数名が異なる場合がある。

本ガイドでは、
SQL日付関数の仕組み
当月・前月・期間指定でよく使う現場テンプレ
MySQL/PostgreSQL/Oracleごとの違い
・初心者がハマる“失敗”パターンと回避法
コピペですぐ動くサンプル例
まで、実務ですぐ試せるよう体系立てて解説します。
迷ったとき、安心して戻ってこられる“現場の味方”にしてください。

(SQLのサブクエリや複雑な集計については『【SQL】副問い合わせ入門|基本構文から実例まで徹底解説』も参考になります)


SQL日付関数とは?基礎知識と「現場で困る理由」

なぜ日付関数はこんなにややこしいのか?
その正体は、“データ型”や“DBごとの書き方”が微妙に違うからです。
たとえば「今月だけデータを抽出」したい場合でも、DBMSごとに書き方が変わります。

用語解説:データ型
データベースで扱う値の種類(例:日付型、文字列型、数値型など)。型が異なると演算や比較の挙動が変わる。

用語解説:DBMS
データベース管理システム(MySQL、PostgreSQL、Oracleなど)。SQLの文法や関数に違いがある。

  • 今日・今月・前月のデータを取得したい
  • 日付ごとに売上や件数を集計したい
  • 日付形式を整えたい(YYYY-MM-DDなど)

現場でよく使うのは、CURRENT_DATEDATE_ADD/DATE_SUBDATEDIFFDATE_FORMATなど。
一度コツを掴めば、現場SQLの“脱・コピペ依存”が叶います。

用語解説:CURRENT_DATE
現在の日付(システム日付)を返すSQL関数。DBMSごとに同名または類似の関数がある。

用語解説:DATE_ADD/DATE_SUB
日付に対して日数や月数を加算・減算する関数。MySQLなどでよく使われる。

用語解説:DATEDIFF
2つの日付の差(日数)を計算する関数。

用語解説:DATE_FORMAT
日付や時刻を指定した書式(例:YYYY-MM-DD)で文字列に変換する関数。


主なSQL日付関数とDB別サンプル

■ MySQLでの日付関数

  • 今日:SELECT CURRENT_DATE;
  • 1か月前:SELECT DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH);
  • 書式変換:SELECT DATE_FORMAT(NOW(), ‘%Y-%m-%d’);
  • 差分:SELECT DATEDIFF(‘2025-12-15’, ‘2025-12-01’);

用語解説:NOW()
現在の日付と時刻を返すMySQLの関数。

用語解説:INTERVAL
日付計算で使う期間指定子。例:INTERVAL 1 MONTHは「1か月分」を意味する。

■ PostgreSQLでの日付関数

  • 今日:SELECT CURRENT_DATE;
  • 1か月前:SELECT CURRENT_DATE – INTERVAL ‘1 month’;
  • 書式変換:SELECT TO_CHAR(NOW(), ‘YYYY-MM-DD’);
  • 差分:SELECT (‘2025-12-15’::date – ‘2025-12-01’::date);

用語解説:TO_CHAR
日付や数値を指定した書式の文字列に変換するPostgreSQLやOracleの関数。

用語解説:::date
PostgreSQLで型変換を行う記法。’2025-12-15′::dateは文字列を日付型に変換する。

■ Oracleでの日付関数

  • 今日:SELECT SYSDATE FROM DUAL;
  • 1か月前:SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
  • 書式変換:SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD’) FROM DUAL;
  • 差分:SELECT TO_DATE(‘2025-12-15′,’YYYY-MM-DD’) – TO_DATE(‘2025-12-01′,’YYYY-MM-DD’) FROM DUAL;

用語解説:SYSDATE
Oracleで現在の日付と時刻を返す関数。

用語解説:DUAL
OracleでSELECT文の動作確認などに使う特殊な1行テーブル。

用語解説:ADD_MONTHS
指定した月数だけ日付を加算・減算するOracleの関数。

用語解説:TO_DATE
文字列を日付型に変換する関数。

■ SQL Serverその他

GETDATE()DATEADDCONVERTなどを使用します。
引数や書式が異なるため、現場ごとの確認が必須です。

用語解説:GETDATE()
SQL Serverで現在の日付と時刻を返す関数。

用語解説:DATEADD
SQL Serverで日付に日数や月数を加算・減算する関数。

用語解説:CONVERT
データ型や日付書式を変換するSQL Serverの関数。


よく使う「当月・前月・期間指定」クエリ【テンプレ集】

■ 当月データを抽出

SELECT * FROM テーブル名
WHERE DATE_FORMAT(日付カラム, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m');

■ 前月データを抽出

SELECT * FROM テーブル名
WHERE DATE_FORMAT(日付カラム, '%Y-%m')
  = DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m');

■ 任意期間を指定

SELECT * FROM テーブル名
WHERE 日付カラム BETWEEN '2025-12-01' AND '2025-12-15';

(BETWEENの使い方や注意点は『SQL BETWEENの使い方と注意点|範囲指定・失敗例・日付対応を徹底解説』をご参照ください)

用語解説:BETWEEN
指定した2つの値の範囲内にあるデータを抽出するSQLの演算子。


ありがち失敗例と対策

  • 日付型と文字列型の混在CASTTO_DATEで明示変換
  • BETWEENの範囲ミス:月末・時間指定に注意
  • タイムゾーン未考慮AT TIME ZONEの利用を検討

(SQLのAS句やエイリアスの使い方は『SQL AS句とは?エイリアスの使い方・省略・現場レビュー徹底ガイド』もご参照ください)

用語解説:CAST
データ型を明示的に変換するSQLの標準関数。

用語解説:AT TIME ZONE
日付や時刻にタイムゾーン情報を付与・変換するSQLの構文。DBMSによってサポート状況が異なる。


まとめ|SQL日付関数を現場で使い倒すために

SQL日付関数は、どの現場でも必須のスキルです。
テンプレをまず動かし、自分用のクエリ集として育てていきましょう。

ぜひコードをコピペして、まずは動かしてみてください。


FAQ|よくある質問

  • Q. よく使う日付関数は?
    A. CURRENT_DATE、DATE_ADD、DATEDIFFなどです。
  • Q. 当月・前月の取得方法は?
    A. 年月フォーマットで比較する方法が一般的です。
  • Q. 処理が重くなる原因は?
    A. インデックスが効かない条件指定が主な原因です。

もっとルートゼロを知りたいなら

DISCOVER MORE