CodeGym /コース /SQL SELF /日付と時間を扱うデータ型: DATE, TIME,

日付と時間を扱うデータ型: DATE, TIME, TIMESTAMP

SQL SELF
レベル 15 , レッスン 4
使用可能

日付や時間を扱うアプリ、どれくらい見たことある?オンライン注文、スケジュール、DBの変更履歴…全部、正しい時間の保存が超大事だよね。PostgreSQLはこういうデータを扱うための強力なツールを持ってるし、時間のテーブルって別に怖い時計の表じゃなくて、イベントを分析・整理するためのしっかりした構造なんだ。

日付・時間用の型を使うと:

  • 日付だけDATE、時間だけTIME、両方まとめてTIMESTAMPで保存できる。
  • 日付の加算、差分計算、時間でのレコード絞り込みなどの操作ができる。
  • タイムゾーンも扱える(これはまた今度のレクチャーで!)。

データ型: DATE, TIME, TIMESTAMP

DATEデータ型

DATE型は日付だけを保存するためのもの。年・月・日だけ記録する。こんな時に便利:

  • ユーザーの誕生日を保存したいとき。
  • イベントの日付だけ重要で、時間はどうでもいいとき。

フォーマット例:YYYY-MM-DD(年-月-日)。

例:

id name - VARCHAR(100) event_date - DATE
1 SQL Workshop 2025-06-15
2 Python 2025-06-17
3 Java Courses 2025-06-25

TIMEデータ型

TIME型は時間だけを保存するためのもの。こんな時に便利:

  • 例えば勤務開始時刻みたいなスケジュールを保存したいとき。
  • 時間が重要だけど、日付はどうでもいいとき。

フォーマット例:HH:MI:SS(時:分:秒)。

例:

id task_name - VARCHAR(100) start_time - TIME
1 Team Meeting 09:00:00
2 Code Review 11:30:00
3 Client Call 15:00:00

TIMESTAMPデータ型

TIMESTAMPは日付と時間のセット。こんな時に便利:

  • 例えばユーザーがログインした瞬間を記録したいとき。
  • 変更履歴(ログ)を追いたいときのタイムスタンプが必要なとき。

フォーマット例:YYYY-MM-DD HH:MI:SS(年-月-日 時:分:秒)。

例:

id action - VARCHAR(100) login_time - TIMESTAMP
1 User Login 2023-10-15 14:30:00
2 File Uploaded 2023-10-15 15:10:00
3 User Logout 2023-10-15 16:45:00

日付と時間の操作

どんな型があるかわかったところで、実際どうやって使うのか見てみよう。PostgreSQLには日付・時間操作用の便利な関数がたくさんあるよ。

日付・時間の一部を取り出す

もし 型の値から年・月・日・時だけ取り出したいなら、 EXTRACT関数を使おう。

例:

SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS year;
-- 結果: 2025

SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS month;
-- 結果: 06

SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS day;
-- 結果: 15

時間の加算・減算

1週間後が知りたい?昨日はいつ?そんな時はinterval演算を使おう。

例:

-- 現在の日付に7日足す
SELECT CURRENT_DATE + INTERVAL '7 days' AS next_week;

-- 1ヶ月引く
SELECT CURRENT_DATE - INTERVAL '1 month' AS last_month;

日付の比較

イベントがもう過ぎたか知りたい?バグ探すより簡単、値を比較するだけ!

例:

SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- 過去のイベントを全部選ぶ

日付・時間の関数については次のレクチャーで詳しくやるよ。今は「こういう型がある」って覚えておけばOK!

タイムゾーン問題と時間の標準

このレクチャーではタイムゾーンの詳細まではやらないけど、PostgreSQLはTIMESTAMPTZ(タイムゾーン付きタイムスタンプ)もサポートしてる。例えば2023-10-15 14:30:00+02はUTC+2の時間ってこと。

この話はコースの後半でちゃんとやるから、楽しみにしててね :P

じゃあ、今学んだ知識を実際に使ってみよう。学生の授業スケジュールを保存するテーブルを作ってみるよ。

id subject_name class_date - DATE start_time - TIME end_time - TIME created_at - TIMESTAMP
1 Mathematics 2023-10-16 09:00:00 10:30:00 2023-10-12 14:00:00
2 Physics 2023-10-16 11:00:00 12:30:00 2023-10-12 14:00:00
3 Chemistry 2023-10-17 09:00:00 10:30:00 2023-10-12 14:01:00
4 Literature 2023-10-17 11:00:00 12:30:00 2023-10-12 14:01:00
5 Computer Science 2023-10-18 10:00:00 11:30:00 2023-10-12 14:02:00

あと数回のレクチャーで、こういうテーブルをSQLで自分で作れるようになるよ。今は「へぇ〜」って眺めておこう :)

よくあるミス

日付・時間のフォーマット: データを挿入するときは正しいフォーマットを守ろう。日付はYYYY-MM-DD、時間はHH:MI:SS"15/10/2023"みたいに書くとPostgreSQLは理解できないよ。

データ型の不一致: 例えばDATE型のカラムにテキストを入れようとするとエラーになる。

時間間隔のミス: 例えば2月に30日足すと、PostgreSQLはちゃんと処理してくれるけど、日付はもう3月になってるかも。

これでPostgreSQLの日付・時間データ型はバッチリ!実際のプロジェクトでもスケジュール管理やイベントのログ、システムの重要な出来事の追跡に超役立つよ!

1
アンケート/クイズ
数値データ型、レベル 15、レッスン 4
使用不可
数値データ型
数値データ型
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION