เมื่อต้องการลบจำนวนตัวอักษรคงที่จากท้ายสตริง (Trim Right) ให้ใช้ SUBSTRING() หรือ LEFT() ร่วมกับ LENGTH() คำนวณตำแหน่ง แล้ว UPDATE กลับไป
สร้างตารางและข้อมูล
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentSubject varchar(100)
);
mysql> insert into DemoTable(StudentSubject) values
('Introduction to Java'),('Introduction to C'),('Introduction to C++'),('Spring And Hibernate');
ข้อมูลก่อนลบ
+-----------+----------------------+ | StudentId | StudentSubject | +-----------+----------------------+ | 1 | Introduction to Java | | 2 | Introduction to C | | 3 | Introduction to C++ | | 4 | Spring And Hibernate | +-----------+----------------------+
คำสั่ง UPDATE ลบ 4 ตัวสุดท้าย
mysql> update DemoTable set StudentSubject = SUBSTRING(StudentSubject, 1, LENGTH(StudentSubject) - 4);
ผลลัพธ์หลัง UPDATE
+-----------+------------------+ | StudentId | StudentSubject | +-----------+------------------+ | 1 | Introduction to | | 2 | Introduction | | 3 | Introduction to | | 4 | Spring And Hiber | +-----------+------------------+
คำอธิบาย SUBSTRING
SUBSTRING(str, start_position, length)
-- เริ่มที่ 1, ความยาว = ความยาวทั้งหมด - 4
วิธีทางเลือกอื่น
| วิธี | คำสั่ง | หมายเหตุ |
|---|---|---|
| SUBSTRING | SUBSTRING(col, 1, LENGTH(col)-4) | มาตรฐาน SQL |
| LEFT | LEFT(col, LENGTH(col)-4) | อ่านง่ายกว่า (MySQL Extension) |
| TRIM (MySQL 8.0+) | TRIM(TRAILING 'Java' FROM col) | ลบสตริงเฉพาะ ไม่ใช่จำนวนตัวอักษร |
| REGEXP_REPLACE (8.0+) | REGEXP_REPLACE(col, '.{4}$', '') | Regex เลข 4 ตัวท้าย |
คำเตือนสำคัญ
- UPDATE ไม่มี WHERE - จะ Update ทุกแถวในตาราง!
- สำรองข้อมูลก่อน -
CREATE TABLE backup AS SELECT * FROM DemoTable; - ความยาวน้อยกว่า 4 - LENGTH-4 จะเป็นลบ → ผลลัพธ์ว่างหรือ Error ขึ้นกับ Version
- เพิ่ม WHERE:
WHERE LENGTH(StudentSubject) > 4
ปลอดภัยกว่า: ใช้ CASE WHEN
UPDATE DemoTable
SET StudentSubject = CASE
WHEN LENGTH(StudentSubject) > 4
THEN LEFT(StudentSubject, LENGTH(StudentSubject) - 4)
ELSE StudentSubject
END;