PostgreSQL - 有用的函數

你好,有抱負的數據庫愛好者!我很興奮能與你一起開展這次旅程,我們將探索PostgreSQL函數的奇妙世界。作為你親切鄰居的計算機科學老師,我見過無數學生從SQL新手蛻變成數據庫大師,我非常高興能幫助你實現同樣的目標。所以,讓我們挽起袖子,深入PostgreSQL函數的神奇領域!

PostgreSQL - Useful Functions

PostgreSQL函數是什麼?

在我們開始玩轉花哨的函數之前,讓我們先了解一下它們是什麼。可以把PostgreSQL函數想象成數據庫世界中的個人事務助理。它們就像小機器人,為你執行特定的任務,讓你的生活更輕鬆,查詢更高效。

為什麼使用函數?

想象一下你正在烘烤cookies(嗯,cookies)。每次都去量食材,豈不是更好有一包預先量好的?這就是函數對你的數據庫操作所做的 - 它們將常用操作打包以便重複使用。

PostgreSQL函數的類型

PostgreSQL提供了琳瑯滿目的函數。讓我們看看一些最有用的:

1. 字符串函數

這些函數幫助你操作文本數據。讓我們從一個簡單的例子開始:

SELECT LOWER('HELLO, WORLD!');

這將輸出:hello, world!

這裡發生了什麼?LOWER()函數將我們的輸入轉換為全部小寫。這就像教你的數據庫低聲說話!

這裡還有一個有趣的:

SELECT CONCAT('PostgreSQL', ' is ', 'awesome!');

輸出:PostgreSQL is awesome!

CONCAT()函數就像一個友好的章魚,抓住不同的字符串並將它們擠壓在一起。

2. 數字函數

讓我們來算一些數字!

SELECT ROUND(3.14159, 2);

輸出:3.14

ROUND()函數就像一個嚴肅的數學老師,強迫我們的π表現得好並且保持在兩位小數。

這裡有一個更實際的例子:

SELECT ABS(-15);

輸出:15

ABS()代表絕對值。它就像夜店的保鏢,讓負數轉身離開並變成正數。

3. 日期/時間函數

當你在數據庫裡玩得開心的時候,時間會飛逝!讓我們看看我們如何操作日期:

SELECT CURRENT_DATE;

這會給你今天的日期。就像你的數據庫裡有一個日曆!

來點更複雜的?

SELECT AGE(TIMESTAMP '2000-01-01', TIMESTAMP '1969-07-20');

這會計算兩個日期之間的時間。這對於那些“你多少歲的時候...”的問題來說非常完美!

4. 條件表達式

有時候我們需要數據庫做出決策。這時CASE表達式就派上用場了:

SELECT
product_name,
CASE
WHEN price < 10 THEN '便宜'
WHEN price < 50 THEN '中等'
ELSE '貴'
END AS price_category
FROM products;

這就像給你的數據庫一個價格槍,並告訴它根據產品的價格給產品標籤。這是現場對數據進行分類的好方法!

創建自定義函數

現在我們已經看到了一些內置函數,讓我們創建我們自己的!這就像成為一個瘋狂科學家,但不是創造怪物,而是創造有用的數據庫小助手。

CREATE FUNCTION greet(name TEXT) RETURNS TEXT AS $$
BEGIN
RETURN 'Hello, ' || name || '! Welcome to PostgreSQL!';
END;
$$ LANGUAGE plpgsql;

現在我們可以使用我們的函數:

SELECT greet('Alice');

輸出:Hello, Alice! Welcome to PostgreSQL!

我們剛剛為我們的數據庫創造了一個友好的問候者。這就像教你的數據庫有禮貌!

實際範例

讓我們將我們的新知識應用到一些真實世界的場景:

範例 1:客戶忠誠計劃

想象一下我們正在運營一個忠誠計劃,客戶根據他們的總消費獲得不同的狀態。

CREATE FUNCTION get_customer_status(total_purchases NUMERIC) RETURNS TEXT AS $$
BEGIN
RETURN CASE
WHEN total_purchases < 100 THEN 'Bronze'
WHEN total_purchases < 500 THEN 'Silver'
WHEN total_purchases < 1000 THEN 'Gold'
ELSE 'Platinum'
END;
END;
$$ LANGUAGE plpgsql;

-- 使用函數
SELECT
customer_name,
total_purchases,
get_customer_status(total_purchases) AS loyalty_status
FROM customers;

這個函數就像一個忠誠的保鏢,根據客戶的消費給他們分配VIP狀態。

範例 2:年齡計算器

讓我們創建一個函數來計算年齡並對人進行分類:

CREATE FUNCTION categorize_age(birthdate DATE) RETURNS TEXT AS $$
DECLARE
age_in_years INTEGER;
BEGIN
age_in_years := DATE_PART('year', AGE(CURRENT_DATE, birthdate));

RETURN CASE
WHEN age_in_years < 18 THEN '未成年'
WHEN age_in_years BETWEEN 18 AND 65 THEN '成人'
ELSE '老年人'
END;
END;
$$ LANGUAGE plpgsql;

-- 使用函數
SELECT
name,
birthdate,
categorize_age(birthdate) AS age_category
FROM people;

這個函數就像一個明智的貓頭鷹,查看出生日期並鳴叫出年齡分類。

結論

恭喜你!你剛剛踏入PostgreSQL函數的奇妙世界。我們已經介紹了字符串操作、數字計算、日期操作,甚至創建了我們自己的自定義函數。記住,熟能生巧,所以不要害怕嘗試並創造你自己的函數。

當我們結束時,這裡有一個表總結我們學到的函數:

函數 目的 示例
LOWER() 將字符串轉換為小寫 LOWER('HELLO') → 'hello'
CONCAT() 將字符串合併在一起 CONCAT('A', 'B', 'C') → 'ABC'
ROUND() 將數字四舍五入 ROUND(3.14159, 2) → 3.14
ABS() 獲取絕對值 ABS(-15) → 15
CURRENT_DATE 獲取當前日期 CURRENT_DATE → '2023-06-15'
AGE() 計算日期之間的時間 AGE('2000-01-01', '1969-07-20')
CASE 條件表達式 CASE WHEN x > 0 THEN 'Positive' ELSE 'Non-positive' END

記住,這些函數是你的新朋友,在數據庫世界中,它們總是準備幫助你操作數據,做出決策,並創建強大的查詢。所以勇往直前,使用函數吧!祝你查詢愉快,願你的數據庫永遠正常化,查詢優化!

Credits: Image by storyset