CodeGym /Các khóa học /SQL SELF /Định dạng chuỗi: CONCAT(), UPPER(), LOWER()

Định dạng chuỗi: CONCAT(), UPPER(), LOWER()

SQL SELF
Mức độ , Bài học
Có sẵn

Làm việc với dữ liệu dạng text là chuyện hằng ngày khi đụng tới database. Giả sử bạn là dev cho một shop online, và bạn có một database người dùng. Bạn cần hiển thị họ tên đầy đủ của user cho banner chào mừng trên web, ví dụ: "Chào mừng, Otto Art!". Hoặc bạn cần chuẩn hóa tất cả email (ví dụ chuyển hết về chữ thường). Mấy trường hợp này thì không thể thiếu thao tác với chuỗi đâu nha.

PostgreSQL cho bạn mấy công cụ mạnh để xử lý text. Hôm nay mình sẽ nói về ba công cụ cơ bản nhất:

  • CONCAT() — nối chuỗi.
  • UPPER() — chuyển chuỗi thành chữ in hoa.
  • LOWER() — chuyển chuỗi thành chữ thường.

Làm việc với hàm CONCAT()

Hàm CONCAT() cho phép bạn ghép nhiều chuỗi lại thành một. Cực kỳ hữu ích nếu dữ liệu nằm ở nhiều cột khác nhau mà bạn cần gộp lại để hiển thị.

Cú pháp

CONCAT(string1, string2, ..., stringN)
  • string1, string2, stringN — chuỗi hoặc tên cột bạn muốn nối.
  • Trả về một chuỗi gồm tất cả các tham số đã nối lại.

Ví dụ: xử lý tên

Giả sử bạn có bảng students:

first_name last_name
Otto Art
Maria Chi
Anna Pal

Nhiệm vụ: hiển thị họ tên đầy đủ của sinh viên theo dạng "Tên Họ".

Câu truy vấn:

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

Kết quả:

full_name
Otto Art
Maria Chi
Anna Pal

Chú ý ' ' giữa tên và họ nhé. Đó là dấu cách mình thêm vào để tách hai chuỗi.

Một số lưu ý khi dùng

CONCAT() sẽ bỏ qua NULL. Nếu một tham số là NULL, nó sẽ bị bỏ qua luôn. Nếu bạn chưa biết NULL là gì thì đừng lo, mình sẽ nói kỹ hơn ở bài sau nha.

Có thể dùng toán tử || thay cho CONCAT(), ví dụ:

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

Đổi kiểu chữ: UPPER()LOWER()

Giả sử bạn đang xử lý email mà user nhập đủ kiểu: ivan@example.com, IVAN@EXAMPLE.COM. Để chuẩn hóa thì thường cần:

  • chuyển text về cùng một kiểu trước khi so sánh (ví dụ lowercase).
  • làm nổi bật từ quan trọng (ví dụ UPPERCASE cho tiêu đề).

UPPER(): chuyển text thành in hoa

Hàm UPPER() sẽ chuyển text thành toàn bộ chữ in hoa.

Cú pháp:

UPPER(string)
  • string — chuỗi hoặc tên cột dạng text.

Ví dụ:

Bảng students có thêm cột email:

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

Muốn hiển thị email ở dạng in hoa:

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

Kết quả:

email email_upper
otto@example.com OTTO@EXAMPLE.COM
MARIA@EXAMPLE.com MARIA@EXAMPLE.COM
anna.pal@gmail.com ANNA.PAL@GMAIL.COM

LOWER(): chuyển text thành chữ thường

Tương tự, hàm LOWER() sẽ chuyển text thành toàn bộ chữ thường.

Cú pháp:

LOWER(string)

Ví dụ:

Chuyển email về chữ thường hết:

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

Kết quả:

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

Ví dụ thực tế và case study

Cùng tổng hợp lại mấy cái vừa học nha.

Tạo họ tên đầy đủ ở dạng in hoa

Câu truy vấn:

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

Kết quả:

full_name_upper
OTTO ART
MARIA CHI
ANNA PAL

Ở đây mình dùng CONCAT() để ghép tên và họ, rồi UPPER() để chuyển hết thành in hoa.

Ví dụ: chuẩn hóa email

Muốn chuyển tất cả email về chữ thường:

UPDATE students
SET email = LOWER(email);

Bây giờ tất cả email trong bảng đều đồng nhất, không quan trọng ban đầu viết hoa hay thường.

Cách hoạt động của lệnh UPDATE bạn sẽ học ở bài sau nha.

Tạo lời chào cho user

Thêm lời chào "Chào mừng" vào trước họ tên:

SELECT CONCAT('Chào mừng, ', first_name, ' ', last_name, '!') AS greeting
FROM students;

Kết quả:

greeting
Chào mừng, Otto Art!
Chào mừng, Maria Chi!
Chào mừng, Anna Pal!

Mấy lỗi hay gặp khi dùng hàm xử lý text

Nếu quên dấu cách trong CONCAT(), kết quả sẽ bị dính liền nhìn kỳ lắm. Ví dụ:

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

Kết quả sẽ là: "OttoArt", "MariaChi". Nhớ thêm dấu cách đúng chỗ nha.

Dùng NULL. Nếu một tham số của CONCAT()NULL, chuỗi kết quả có thể bị thiếu. Ví dụ:

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

Nếu middle_name = NULL, kết quả sẽ là "Otto NULL Art". Để tránh vụ này, bạn có thể dùng hàm COALESCE():

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

Chi tiết về NULL và hàm COALESCE() sẽ có ở bài sau nha :P

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION