你是不是常常遇到要處理日期和時間的應用?線上訂單、課表、資料庫的變更紀錄——這些都超級仰賴正確的時間存取。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 就是日期加時間的組合。很適合:
- 要記錄某個時刻,比如使用者登入系統的時間。
- 需要時間戳記來追蹤變更(log)。
範例格式: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 內建很多函式可以操作日期和時間。
抽取日期和時間的部分
如果你有一個時間戳記(TIMESTAMP),想要只拿出年份、月份、日期或小時,可以用 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
加減時間區間
想知道一週後是什麼時候?還是昨天是什麼時候?用 interval 操作就對了。
範例:
-- 加 7 天到現在日期
SELECT CURRENT_DATE + INTERVAL '7 days' AS next_week;
-- 減 1 個月
SELECT CURRENT_DATE - INTERVAL '1 month' AS last_month;
日期比較
怎麼知道事件已經發生了?比找 bug 還簡單——直接比大小就好。
範例:
SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- 選出所有過去的事件
更多日期和時間的函式之後會再講。現在只要記得有這些型別就夠啦~
時區問題跟時間標準
雖然這堂課還不會細講時區,不過要先提一下 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 指令自己建這種表格啦。現在先欣賞一下 XD
常見錯誤
日期和時間格式: 插入資料時一定要用正確格式:YYYY-MM-DD 是日期,HH:MI:SS 是時間。如果你想插入 "15/10/2023",PostgreSQL 會看不懂啦。
資料型別不符: 如果你想把文字塞進 DATE 欄位,會直接噴錯。
時間區間錯誤: 比如你加 30 天到二月,PostgreSQL 會自動處理,但結果可能已經到三月了。
現在你已經認識 PostgreSQL 處理日期和時間的資料型別了。在實際專案裡,這超級有用,像是做課表、事件紀錄、或追蹤系統裡的重要事件!
GO TO FULL VERSION