Khi làm query, đôi khi cần lấy raw data từ database và format lại cho dùng nơi khác. Bài viết xem vài hàm MySQL giúp làm việc với kiểu string trong query.
Xây dựng Schema
Phần này chuẩn bị schema nhanh minh họa khái niệm SQL. Dùng MySQL – khuyên dùng SQL Fiddle practice syntax, chạy query. Có thể test query trên relational database khác.
Tạo bảng và Insert giá trị
CREATE TABLE birthdays ( name varchar(200) NOT NULL, birthday varchar(10) NOT NULL );
INSERT INTO birthdays (name, birthday) VALUES("Jane", "11/20/1993");
INSERT INTO birthdays (name, birthday) VALUES("Duncan", "01/15/1987");
INSERT INTO birthdays (name, birthday) VALUES("Lucas", "07/21/1996");
INSERT INTO birthdays (name, birthday) VALUES("Alexa", "12/31/1988");
4 dòng đầu tạo bảng "birthdays" cột "name", "birthday". Dòng sau insert giá trị. Dùng khi build query.
Chạy query cơ bản:
SELECT name, birthday FROM birthdays;
Kết quả bảng name/birthday.
Xây dựng Query Statements
CONCAT()
Hàm CONCAT() trả về kết quả join các argument thành 1 chuỗi. Ít nhất 1 argument, có thể nhiều. Argument có thể:
- Binary String – Nếu argument nào là binary string, return binary string.
- Nonbinary String – Chuỗi thường. Tất cả argument nonbinary → return nonbinary string.
- Numeric – Input numeric type → ép thành nonbinary string trước khi join.
- Null – Giá trị NULL bị bỏ qua.
Cú pháp chính thức:
CONCAT( <str value 1>, <str value 2>, [ ... <str value N> ]);
Ví dụ MySQL:
SELECT CONCAT(name, " ", birthday) AS Result FROM birthdays;
SELECT return value từ concatenation name, space, birthday, đặt tên "Result".
Kết quả: "Jane 11/20/1993", "Duncan 01/15/1987", v.v.
So sánh với query gốc: khác gì? Ưu điểm format cách này? Tùy ứng dụng dùng data.
CONCAT_WS()
CONCAT_WS() giống CONCAT() nhưng có argument bắt buộc đầu tiên không có trong CONCAT: separator (dấu phân cách) giữa các argument còn lại. Các quy tắc CONCAT() vẫn áp dụng.
Cú pháp:
CONCAT_WS(<separator>, <str value 1>, <str value 2>, [ ... <str value N> ]);
Ví dụ MySQL:
SELECT CONCAT_WS(", ", name, birthday) AS Result FROM birthdays;
Kết quả: "Jane, 11/20/1993", "Duncan, 01/15/1987" – separator ", " giữa các argument.
Giống CONCAT(), CONCAT_WS() trả về 1 cột Result với giá trị chuỗi nối với separator.
Kết luận
Bài viết cover SQL CONCAT() và CONCAT_WS() trong MySQL. Lưu ý syntax có thể khác nhẹ ở relational database khác (mỗi DB có flavor SQL riêng). Khái niệm hàm giống nhau, chỉ wording khác.