เมื่อต้องการลบอักขระนำหน้าจำนวนคงที่ (เช่น 2 ตัวแรก) จากคอลัมน์ทุกแถว สามารถใช้ฟังก์ชัน SUBSTRING() (หรือ SUBSTR()) ร่วมกับ UPDATE
รูปแบบคำสั่ง
UPDATE table_name
SET column_name = SUBSTRING(column_name, 3)
WHERE condition;
SUBSTRING(str, pos)- ดึงสตริงตั้งแต่ตำแหน่งposจนจบ (ตำแหน่งเริ่มต้นที่ 1)pos = 3- ข้าม 2 ตัวแรก เริ่มจากตัวที่ 3WHERE- กรองแถวที่ต้องการอัปเดต (สำคัญ: ป้องกันการลบข้อมูลที่ไม่ต้องการ)
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE RemoveFirstTwoCharacterDemo (
Id INT NOT NULL AUTO_INCREMENT,
StringValue VARCHAR(30),
PRIMARY KEY (Id)
);
INSERT INTO RemoveFirstTwoCharacterDemo (StringValue) VALUES
('U:100'), ('S:20'), ('N/A'), ('T:8'), ('N/A'), ('W:99');
ข้อมูลก่อนอัปเดต:
+----+-------------+
| Id | StringValue |
+----+-------------+
| 1 | U:100 |
| 2 | S:20 |
| 3 | N/A |
| 4 | T:8 |
| 5 | N/A |
| 6 | W:99 |
+----+-------------+
2. ลบ 2 ตัวแรก เฉพาะแถวที่ไม่ใช่ 'N/A'
UPDATE RemoveFirstTwoCharacterDemo
SET StringValue = SUBSTRING(StringValue, 3)
WHERE StringValue <> 'N/A';
ผลลัพธ์: Query OK, 4 rows affected
3. ตรวจสอบข้อมูลหลังอัปเดต
SELECT * FROM RemoveFirstTwoCharacterDemo;
+----+-------------+
| Id | StringValue |
+----+-------------+
| 1 | 100 |
| 2 | 20 |
| 3 | N/A |
| 4 | 8 |
| 5 | N/A |
| 6 | 99 |
+----+-------------+
กรณีศึกษาเพิ่มเติม
ลบ 3 ตัวแรก
UPDATE t SET col = SUBSTRING(col, 4);
เก็บแค่ 5 ตัวแรก (ตัดท้าย)
UPDATE t SET col = SUBSTRING(col, 1, 5);
เก็บระหว่างตำแหน่ง 3-7
UPDATE t SET col = SUBSTRING(col, 3, 5);
ฟังก์ชันที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| SUBSTRING(str, pos) | ดึงตั้งแต่ pos จนจบ |
| SUBSTRING(str, pos, len) | ดึงตั้งแต่ pos ยาว len ตัว |
| LEFT(str, len) | ดึง len ตัวแรก (เท่ากับ SUBSTRING(str,1,len)) |
| RIGHT(str, len) | ดึง len ตัวสุดท้าย |
| SUBSTRING_INDEX(str, delim, count) | ดึงส่วนก่อน/หลัง delimiter |
คำเตือน: ทดสอบด้วย SELECT ก่อน UPDATE จริง และสำรองข้อมูล (backup) ก่อนทำการเปลี่ยนแปลงจำนวนมาก