PostgreSQL - 日期/時間函數與操作符
Hello, 有志的程序员們!今天,我們將踏上一段令人興奮的旅程,探索 PostgreSQL 中的日期和時間世界。作為你們友好的鄰居計算機科學老師,我將帶著過去 15 年教學的熱情來指導你們這些概念。所以,拿起你的虛擬筆記本,讓我們一起來看看吧!
了解 PostgreSQL 中的日期和時間
在我們開始探索函數和操作符之前,讓我們花一會兒時間了解一下為什麼日期和時間在編程中如此重要。想像一下你正在建造一臺時間機(這不是很酷嗎?)你需要知道你現在在哪裡,以及(或當)你想去哪裡。這就是我們在數據庫中做的事情——我們追踪事情發生的時間,它們持續多久,甚至預測未來的事件。
現在,讓我們看看 PostgreSQL 中一些最有用的日期和時間函數。
AGE(timestamp, timestamp) 和 AGE(timestamp)
AGE 函數就像那個總是記得事情發生多久了的朋友。它計算兩個時間戳之間或時間戳與當前日期之間的差異。
示例 1:計算年齡
SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');
這將返回類似於以下內容:
33 年 4 個月 14 天
這裡發生了什麼?我們請求 PostgreSQL 計算 1990 年 1 月 1 日和 2023 年 5 月 15 日之間的時間差。這就像問,“如果某人在 1990 年 1 月 1 日出生,他會有多大年紀?”
示例 2:從當前日期計算年齡
SELECT AGE(TIMESTAMP '1990-01-01');
這將返回 1990 年 1 月 1 日與當前日期之間的時間差。這就像問,“1990 年 1 月 1 日出生的某人現在多大年紀?”
CURRENT DATE/TIME 函數
這些函數就像你數據庫內置的時鐘和日曆。它們告訴你現在是什麼時間。
示例 3:獲取當前日期和時間
SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
這將返回今天的日期、當前時間和兩者的組合。這就像問你的數據庫,“今天是什麼日子,現在是什麼時間,以及現在的確切時刻是什麼?”
DATE_PART 和 DATE_TRUNC 函數
DATE_PART 像是一臺時間機器,可以放大特定日期或時間的部分。DATE_TRUNC 則像是一個時間簡化器——它將時間降低到指定時間單位。
示例 4:提取日期的部分
SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');
第一個查詢將返回 2023,第二個將返回 10。這就像問,“這個時間戳是哪一年的?”和“這個時間戳是白天還是晚上?”
示例 5:截斷時間戳
SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');
這將返回 '2023-05-15 10:00:00'。這就像說,“給我這個時間戳,但是將分鐘和秒數重置為零。”
EXTRACT 函數
EXTRACT 與 DATE_PART 相似,但語法略有不同。這是另一種提取日期或時間特定部分的方法。
示例 6:從時間戳中提取
SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');
這些查詢將分別返回 2023 和 10,與我們的 DATE_PART 示例一樣。
ISFINITE 函數
這些函數就像你數據庫的現實檢查。它們告訴你一個日期、時間戳或間隔是否是一個真實的、有限的值,或者它是一個特殊的无窮大值。
示例 7:檢查有限性
SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');
第一個查詢將返回 true,而第二個將返回 false。這就像問,“2023 年 5 月 15 日是一個真實的日期嗎?”(是的)和“無窮大是一個真實的時間戳嗎?”(不是)。
JUSTIFY 函數
這些函數就像你數據庫的時間調整器。它們將可能有一些奇怪值的間隔調整為更標準的表示形式。
示例 8:調整間隔
SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');
這些可能返回:
1 個月
1 天 12 個小時
1 個月 1 天 12 個小時
這就像說,“將這些時間段表達得更標準一點。”
函數總結
這裡是一個便捷的表格,總結了我們討論的所有函數:
函數 | 描述 |
---|---|
AGE() | 計算時間戳之間的差異 |
CURRENT_DATE | 返回當前日期 |
CURRENT_TIME | 返回當前時間 |
CURRENT_TIMESTAMP | 返回當前日期和時間 |
DATE_PART() | 從日期/時間中提取特定部分 |
DATE_TRUNC() | 將時間戳截斷到指定精確度 |
EXTRACT() | 從日期/時間中提取特定字段 |
ISFINITE() | 檢查日期/時間/間隔是否有限 |
JUSTIFY_DAYS() | 調整間隔中的天數 |
JUSTIFY_HOURS() | 調整間隔中的小時數 |
JUSTIFY_INTERVAL() | 調整整個間隔 |
這就是全部了,各位!我們一起穿越了時間(函數),提取了日期的片段,檢查了無窮大的有限性,甚至調整了間隔。記住,在數據庫中處理日期和時間對於許多應用程序來說是至關重要的,從跟蹤用戶活動到排程事件。
在你繼續編程旅程的過程中,你會發現這些函數非常有用。它們就像是數據庫工具箱中時間操作的多功能工具。持續練習,持續探索,不久之後,你將成為數據庫世界的時間領主!
Credits: Image by storyset