0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL 初心者向け:SYSDATE と TRUNC を使って“日付だけ”を扱う方法

Last updated at Posted at 2025-12-08

はじめに

アドベントカレンダー12/9 = 9記事目です

私が参画しているプロジェクトで SQL を使っていたとき、TRUNC(SYSDATE) という記述を見かけ、「このコードの意味はなんなのか?」と疑問になりました。

そこで調べてみた結果、「日付を扱いやすくするための便利なテクニック」だとわかったので、私と同じようにSQL初学者の方向けに今回まとめてみようと思います。


たとえば次のようなSQLコードを見たとき…

SELECT TRUNC(SYSDATE) FROM DUAL;

このコードは、“今” の日時を返す SYSDATE の値から、時間部分を切り捨て、年月日だけの “その日の 0:00(午前零時)” を返すという意味

つまり、例として「2025-11-19 14:23:45」という現在時刻情報があったとしても、TRUNC(SYSDATE) を使うと 「2025-11-19 00:00:00」 という形で取得できます

このように “日付だけ”“時刻なし” に揃えて扱うことで、日付の比較・絞り込み・集計などがシンプルかつ正確にできるようになります


TRUNC(SYSDATE) の意味と使いどころ

SYSDATE — 現在の日時を得る

  • SYSDATE は Oracle で「今この瞬間の日付と時刻」を返す関数になります
  • たとえば “2025-11-19 14:23:45” のように、日時(年月日+時分秒) を得る事ができます

TRUNC(date) — 時刻部分を切り捨てる

  • TRUNC(date) は、DATE 型の日付データから 時間 (時・分・秒) の情報 を切り捨ててくれる関数です
  • 引数に書式モデル(例えば 'MM', 'YYYY' など)を指定することで、「月初」「年初」などを取得することも可能
  • もし書式を省略した場合(TRUNC(SYSDATE) のように)は、日付だけを残し、時間を 00:00:00 に設定します

利用目的と利点/効果

利用目的 利点 / 効果
今日の日付でデータ登録、テストデータ作成 SYSDATE だと時間も含まれるが、TRUNC(SYSDATE) にすると「その日付の 00:00:00」で登録できる
日付での絞り込みや比較(例:日単位で抽出) 時刻の有無にかかわらず「同じ日付か」を正しく比較できる
月初・年初など期間の境界取得 TRUNC(SYSDATE, 'MM') → 今月の1日や、TRUNC(SYSDATE, 'YYYY') → その年の1月1日などが簡単に得られる

具体例 — SYSDATE と組み合わせて使う

たとえば:

-- 今日の日付(時刻を 00:00:00 に切り捨て)
SELECT TRUNC(SYSDATE) AS today_date
FROM DUAL;
-- 今月の月初日(その月の 1日、時刻 00:00:00)
SELECT TRUNC(SYSDATE, 'MM') AS first_of_month
FROM DUAL;
-- 今年の年初日(1月1日、時刻 00:00:00)
SELECT TRUNC(SYSDATE, 'YYYY') AS first_of_year
FROM DUAL;

どういうとき役に立つか

  • “今日” のデータ」だけを抽出したいとき — 時刻を含めず “日付だけ” にすることで比較ミスを防げる
  • 「月単位」「年単位」での集計や条件指定 — 月初/年初を簡単に取得できるので便利
  • テストデータの生成や、日付ベースの判定時に“時刻のズレ”を気にせず扱いたい場合

⚠️注意点

  • TRUNC() した結果は DATE 型 なので、元の日時が TIMESTAMP 型などだった場合でも、戻り値は DATE になります。([Oracle Docs][1])
  • 「時刻が不要」「日付だけでよい」ケースに限って使うのが基本。時間まで含めた比較や処理をする必要がある場合は注意。
  • フォーマット指定('MM'・'YYYY' など)を使い分けることで、用途にあわせた日付取得が可能

まとめ

  • TRUNC(date) を使うと、日時データから時間部分を切り捨てて「日付だけ」にできる
  • SYSDATE と組み合わせれば「今日の日付」「今月の月初」「今年の年初」などを簡単に取得できる
  • 日付だけで比較・絞り込み・集計したいときに非常に便利 — 特に初心者や日付処理が多いプロジェクトでは重宝する

さいごに

日付や時間を扱うとき、余計な “時刻 (時間・分・秒)” が入っていると、意図しない検索漏れやデータのズレが起きやすい事を知りました。

そして、TRUNC(SYSDATE) のように “日付だけ/時刻なし” に揃えるテクニックを使うことで、そうしたミスを防ぎ、SQL の処理を安定させることができることを学びました

今後もSQLのコードをみていて知らない事・学んだことをアウトプットできればと思います。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?