日付や時間を扱うアプリ、どれくらい見たことある?オンライン注文、スケジュール、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の日付・時間データ型はバッチリ!実際のプロジェクトでもスケジュール管理やイベントのログ、システムの重要な出来事の追跡に超役立つよ!
GO TO FULL VERSION