ใน MySQL สามารถเก็บค่าสตริงในตัวแปรผู้ใช้ (User-defined Variable) และใช้ฟังก์ชัน CONCAT_WS() เพื่อต่อสตริงหลายคอลัมน์ด้วยตัวคั่นที่กำหนด แล้วแสดงผลในคอลัมน์เดียว
ตัวอย่างการใช้งาน
สร้างตารางลูกค้า:
mysql> CREATE TABLE DemoTable1433 (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientFirstName VARCHAR(20),
-> ClientLastName VARCHAR(20)
-> );
เพิ่มข้อมูล:
mysql> INSERT INTO DemoTable1433 (ClientFirstName, ClientLastName) VALUES ('David', 'Miller');
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1433; +----------+-----------------+----------------+ | ClientId | ClientFirstName | ClientLastName | +----------+-----------------+----------------+ | 1 | David | Miller | +----------+-----------------+----------------+
เก็บสตริงที่ต่อแล้วในตัวแปร @concat_variable:
mysql> SET @concat_variable := (SELECT CONCAT_WS('-', ClientFirstName, ClientLastName) FROM DemoTable1433);
แสดงค่าตัวแปร:
mysql> SELECT @concat_variable; +------------------+ | @concat_variable | +------------------+ | David-Miller | +------------------+
ความแตกต่างระหว่าง CONCAT และ CONCAT_WS
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| CONCAT(str1, str2, ...) | ต่อสตริงโดยตรง ไม่มีตัวคั่น | CONCAT('A', 'B') → 'AB' |
| CONCAT_WS(separator, str1, str2, ...) | ต่อสตริงพร้อมตัวคั่น (WS = With Separator) ข้ามค่า NULL | CONCAT_WS('-', 'A', 'B') → 'A-B' |
การใช้งานเพิ่มเติม
- ต่อหลายคอลัมน์:
CONCAT_WS(' ', FirstName, MiddleName, LastName) - จัดการค่า NULL: CONCAT_WS จะข้ามค่า NULL อัตโนมัติ (แตกต่างจาก CONCAT ที่จะคืนค่า NULL หากมีค่า NULL ใดๆ)
- ใช้ใน SELECT โดยตรง:
SELECT CONCAT_WS('-', FirstName, LastName) AS FullName FROM Users
วิธีนี้เหมาะสำหรับการสร้างชื่อเต็ม, รหัสสินค้า, หรือข้อความรวมจากหลายคอลัมน์