CodeGym /課程 /SQL SELF /字串格式化:CONCAT(), UPPER(), LOWER()

字串格式化:CONCAT(), UPPER(), LOWER()

SQL SELF
等級 5 , 課堂 1
開放

處理文字資料是資料庫日常的工作之一。想像你是個網路商店的工程師,你有一個用戶資料庫。你需要在網站的歡迎橫幅上顯示用戶全名,像這樣:"歡迎, Otto Art!"。或者你想要把所有 email 地址標準化(例如全部轉成小寫)。這時候就一定要用到字串操作啦。

PostgreSQL 給你很強大的文字處理工具。今天我們要聊三個基本工具:

  • CONCAT() — 合併字串。
  • UPPER() — 把字串轉成大寫。
  • LOWER() — 把字串轉成小寫。

使用 CONCAT() 函數

CONCAT() 函數可以把多個字串合併成一個。如果你的資料分散在不同欄位,但你想要把它們合在一起顯示,這個就超好用。

語法

CONCAT(string1, string2, ..., stringN)
  • string1string2stringN — 你想要合併的字串或欄位。
  • 會回傳一個包含所有參數的字串。

範例:處理名字

假設我們有一個 students 資料表:

first_name last_name
Otto Art
Maria Chi
Anna Pal

我們的任務:把學生的全名顯示成「名字 姓氏」的格式。

查詢:

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;

結果:

full_name
Otto Art
Maria Chi
Anna Pal

注意 ' ' 在名字和姓氏之間。這是我們加進去的空格,讓字串分開。

使用小技巧

CONCAT() 會忽略 NULL。如果其中一個參數是 NULL,它就直接跳過。如果你還不知道什麼是 NULL,別擔心——我們之後會講。

CONCAT() 的替代方案是 || 運算子,例如:

SELECT first_name || ' ' || last_name AS full_name FROM students;

改變字串大小寫:UPPER()LOWER()

想像你在處理 email 地址,使用者可能會用各種大小寫輸入:ivan@example.comIVAN@EXAMPLE.COM。為了標準化,常常需要:

  • 在比較前把文字統一成一種格式(例如 lowercase)。
  • 強調重要字(例如標題用 UPPERCASE)。

UPPER():字串轉大寫

UPPER() 函數會把字串轉成全部大寫。

語法:

UPPER(string)
  • string — 一個字串或文字欄位名稱。

範例:

students 資料表裡多了一個 email 欄位:

first_name last_name email
Otto Art otto@example.com
Maria Chi MARIA@EXAMPLE.com
Anna Pal anna.pal@mail.ru

我們想把 email 地址都轉成大寫顯示:

SELECT email, UPPER(email) AS email_upper
FROM students;

結果:

email email_upper
otto@example.com OTTO@EXAMPLE.COM
MARIA@EXAMPLE.com MARIA@EXAMPLE.COM
anna.pal@mail.ru ANNA.PAL@MAIL.RU

LOWER():字串轉小寫

同理,LOWER() 函數會把字串轉成全部小寫。

語法:

LOWER(string)

範例:

把 email 地址都轉成小寫:

SELECT email, LOWER(email) AS email_lower
FROM students;

結果:

email email_lower
otto@example.com otto@example.com
MARIA@EXAMPLE.com maria@example.com
anna.pal@mail.ru anna.pal@mail.ru

實用範例與情境

我們來把上面學到的東西組合一下。

建立全名並轉成大寫

查詢:

SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;

結果:

full_name_upper
OTTO ART
MARIA CHI
ANNA PAL

這裡我們用 CONCAT() 合併名字和姓氏,再用 UPPER() 轉成大寫。

範例:email 地址標準化

我們想把所有 email 地址都轉成小寫:

UPDATE students
SET email = LOWER(email);

現在資料表裡所有 email 地址都長一樣,不管原本是什麼大小寫。

UPDATE 的用法我們會在後面幾堂課再詳細介紹。

幫用戶準備歡迎詞

在全名前面加上「歡迎」:

SELECT CONCAT('歡迎, ', first_name, ' ', last_name, '!') AS greeting
FROM students;

結果:

greeting
歡迎, Otto Art!
歡迎, Maria Chi!
歡迎, Anna Pal!

用字串函數常見的錯誤

如果你在 CONCAT() 裡忘了加空格,結果可能會怪怪的。例如:

SELECT CONCAT(first_name, last_name) AS full_name
FROM students;

結果會是:"OttoArt"、"MariaChi"。記得要在適當的地方加空格。

還有 NULL 的使用。如果 CONCAT() 的某個參數是 NULL,字串可能會不完整。例如:

SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;

如果 middle_name = NULL,結果會是 "Otto NULL Art"。為了避免這種情況,可以用 COALESCE() 函數:

SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;

關於 NULL 和 COALESCE() 的細節,我們很快就會講到 :P

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION