CodeGym /課程 /SQL SELF /處理日期和時間的資料型別: DATE、 TIME、 TIMESTAMP

處理日期和時間的資料型別: DATE、 TIME、 TIMESTAMP

SQL SELF
等級 15, 課堂 4
開放

你是不是常常遇到要處理日期和時間的應用?線上訂單、課表、資料庫的變更紀錄——這些都超級仰賴正確的時間存取。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 處理日期和時間的資料型別了。在實際專案裡,這超級有用,像是做課表、事件紀錄、或追蹤系統裡的重要事件!

2
任務
SQL SELF, 等級 15, 課堂 4
上鎖
從 TIMESTAMP 擷取時間部分
從 TIMESTAMP 擷取時間部分
2
任務
SQL SELF, 等級 15, 課堂 4
上鎖
建立會議行程表
建立會議行程表
1
問卷/小測驗
數值型別,等級 15,課堂 4
未開放
數值型別
數值型別
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION