Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลบตัวอักษร 4 ตัวสุดท้ายใน MySQL ด้วย SUBSTRING และ UPDATE

เมื่อต้องการลบจำนวนตัวอักษรคงที่จากท้ายสตริง (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

วิธีทางเลือกอื่น

วิธีคำสั่งหมายเหตุ
SUBSTRINGSUBSTRING(col, 1, LENGTH(col)-4)มาตรฐาน SQL
LEFTLEFT(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;