ฟังก์ชัน CONCAT() ใน MySQL ช่วยรวมข้อความและค่าต่างๆ ได้ ซึ่งมีประโยชน์มากเมื่อต้อง INSERT ข้อมูลที่ต้องประกอบจากหลายส่วนหรือคำนวณจากคอลัมน์อื่น
สถานการณ์: สร้างชื่อโปรเจกต์จาก StudentId
ต้องการ INSERT ข้อมูลไปตารางที่สอง โดย ClientProjectName ประกอบด้วยข้อความคงที่ + StudentId
สร้างตารางแรกและข้อมูล
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(20)
);
mysql> insert into DemoTable(StudentFirstName) values('John');
mysql> insert into DemoTable(StudentFirstName) values('Larry');
mysql> insert into DemoTable(StudentFirstName) values('Bob');
สร้างตารางที่สอง
mysql> create table DemoTable2 (
ClientId int,
ClientProjectName varchar(20)
);
คำสั่ง INSERT ... SELECT พร้อม CONCAT()
mysql> insert into DemoTable2
select StudentId, concat('Web Student=', StudentId) from DemoTable;
ผลลัพธ์
+----------+-------------------+ | ClientId | ClientProjectName | +----------+-------------------+ | 1 | Web Student=1 | | 2 | Web Student=2 | | 3 | Web Student=3 | +----------+-------------------+
ประโยชน์ของวิธีนี้
- INSERT หลายแถวในคำสั่งเดียว (Bulk Insert)
- คำนวณ/แปลงข้อมูลระหว่างทางได้
- ลด Round-trip ระหว่าง Application และ Database
- Atomic operation - ทำสำเร็จทั้งหมดหรือไม่ทำเลย
ฟังก์ชันสตริงที่ใช้ร่วมได้
CONCAT()- รวมสตริง (คืน NULL ถ้ามีค่า NULL ใดๆ)CONCAT_WS(',', col1, col2)- รวมด้วยตัวคั่น (ข้าม NULL)UPPER(),LOWER()- เปลี่ยนตัวพิมพ์TRIM()- ตัดช่องว่างDATE_FORMAT()- จัดรูปแบบวันที่
ตัวอย่างเพิ่มเติม
INSERT INTO logs (message, created_at)
SELECT CONCAT('User ', username, ' logged in at ', DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')),
NOW()
FROM users WHERE last_login > DATE_SUB(NOW(), INTERVAL 1 DAY);