การใช้ CONCAT() และ IFNULL() ใน UPDATE
เพื่อต่อข้อมูลเพิ่มเข้าไปในคอลัมน์เดิม ใช้ CONCAT() ร่วมกับ IFNULL() เพื่อจัดการค่า NULL
รูปแบบคำสั่ง
UPDATE your_table_name
SET your_column = CONCAT(IFNULL(your_column, ''), 'string_to_append');
ตัวอย่างการใช้งานจริง
1. สร้างตาราง
CREATE TABLE AppendDataDemo (
StudentId INT,
StudentName VARCHAR(100),
StudentAge INT
);
2. เพิ่มข้อมูล (มีค่า NULL อยู่ 1 แถว)
INSERT INTO AppendDataDemo VALUES
(101, 'John', 23),
(102, NULL, 24),
(103, 'Mike', 26);
3. ตรวจสอบข้อมูลก่อนอัปเดต
SELECT * FROM AppendDataDemo;
| StudentId | StudentName | StudentAge |
| 101 | John | 23 |
| 102 | NULL | 24 |
| 103 | Mike | 26 |
4. อัปเดตต่อข้อมูล ' Carol,Sam,Maria'
UPDATE AppendDataDemo
SET StudentName = CONCAT(IFNULL(StudentName, ''), ' Carol,Sam,Maria');
ผลลัพธ์หลังอัปเดต
| StudentId | StudentName | StudentAge |
| 101 | John Carol,Sam,Maria | 23 |
| 102 | Carol,Sam,Maria | 24 |
| 103 | Mike Carol,Sam,Maria | 26 |
ฟังก์ชันที่ใช้
| ฟังก์ชัน | หน้าที่ |
CONCAT(str1, str2, ...) | ต่อสตริง (คืน NULL ถ้ามีอาร์กิวเมนต์ NULL) |
IFNULL(expr, alt) | คืน expr ถ้าไม่ NULL, ไม่เช่นนั้นคืน alt |
COALESCE(expr1, expr2, ...) | คืนค่าแรกที่ไม่ NULL (มาตรฐาน SQL) |
CONCAT_WS(sep, str1, str2, ...) | ต่อสตริงด้วย Separator (ข้าม NULL อัตโนมัติ) |
วิธีที่ดีกว่า: ใช้ CONCAT_WS
UPDATE AppendDataDemo
SET StudentName = CONCAT_WS(', ', StudentName, 'Carol', 'Sam', 'Maria');
- ✅ จัดการ NULL เอง (ข้าม NULL)
- ✅ ใส่ Separator อัตโนมัติ (', ')
- ✅ โค้ดสะอาดกว่า
ข้อควรระวัง
- ⚠️ WHERE Clause: อย่าลืม WHERE ถ้าไม่ได้ต้องการอัปเดตทุกแถว
- 📏 Max Length: VARCHAR/TEXT มีขีดจำกัด (65KB/4GB)
- 🔄 Transaction: ใช้ Transaction หากสำคัญ
- 💾 Backup: สำรองข้อมูลก่อน Update จำนวนมาก