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

UPDATE MySQL ลบ Underscore ท้ายสตริงด้วย TRIM(TRAILING)

ลบอักขระเฉพาะที่ท้ายสตริง: TRIM(TRAILING 'char' FROM column)

ฟังก์ชัน TRIM() รองรับการระบุ LEADING (หน้า), TRAILING (ท้าย), BOTH (ทั้งสองข้าง) พร้อมระบุอักขระที่ต้องการลบ

ไวยากรณ์

UPDATE table_name 
SET column_name = TRIM(TRAILING '_' FROM column_name);

สร้างตารางและข้อมูล (มี Underscore ท้าย)

mysql> CREATE TABLE DemoTable1521 (StudentCode VARCHAR(20));
Query OK, 0 rows affected (1.33 sec)

mysql> INSERT INTO DemoTable1521 VALUES('345_'), ('12345'), ('9084_');
Query OK, 3 rows affected

ข้อมูลก่อน UPDATE

+-------------+
| StudentCode |
+-------------+
| 345_        |
| 12345       |
| 9084_       |
+-------------+

คำสั่ง UPDATE: ลบ Underscore ท้าย

mysql> UPDATE DemoTable1521
    -> SET StudentCode = TRIM(TRAILING '_' FROM StudentCode);
Query OK, 2 rows affected (0.34 sec)
Rows matched: 3  Changed: 2  Warnings: 0

ข้อมูลหลัง UPDATE

+-------------+
| StudentCode |
+-------------+
| 345         |
| 12345       |
| 9084        |
+-------------+

รูปแบบ TRIM ทั้งหมด

ฟังก์ชันเก่าที่ Deprecated (MySQL 8.0+)

LTRIM(col)   -- = TRIM(LEADING ' ' FROM col)
RTRIM(col)   -- = TRIM(TRAILING ' ' FROM col)

ประยุกต์: ลบอักขระหลายตัวท้าย (ไม่รองรับโดยตรง)

-- ลบ '_' หรือ '-' ท้าย
SET @val = 'abc_-';
SELECT TRIM(TRAILING '_' FROM TRIM(TRAILING '-' FROM @val));  -- 'abc'

-- หรือใช้ REGEXP_REPLACE (MySQL 8.0+)
SELECT REGEXP_REPLACE(@val, '[-_]+$', '');  -- 'abc'

⚠️ ข้อควรระวัง

  • TRIM คืนค่า String ใหม่ ไม่แก้ไขข้อมูลในตารางโดยตรง ต้องใช้ใน UPDATE
  • ไม่มี WHERE Clause จะ UPDATE ทุกแถว (Rows matched = ทุกแถว)
  • คอลัมน์ที่เป็น NULL จะคืน NULL (ไม่ Error)
Syntaxผลลัพธ์ตัวอย่าง
TRIM(col)ลบ Space ทั้งหน้าและท้าย' abc ' → 'abc'
TRIM(BOTH '_' FROM col)ลบ _ ทั้งหน้าและท้าย'_abc_' → 'abc'
TRIM(LEADING '_' FROM col)ลบ _ หน้าเท่านั้น'_abc_' → 'abc_'
TRIM(TRAILING '_' FROM col)ลบ _ ท้ายเท่านั้น'_abc_' → '_abc'