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

MySQL: อัปเดตลบทุกช่องว่างนำหน้า/ท้ายด้วย TRIM()

การลบช่องว่าง (Whitespace) นำหน้าและท้ายสตริงในทุกแถวด้วย TRIM()

ใช้ TRIM() ในคำสั่ง UPDATE เพื่อลบช่องว่าง leading/trailing ออกจากคอลัมน์ VARCHAR/TEXT

สร้างตารางและข้อมูล (มีช่องว่าง)

mysql> create table DemoTable1405 (
    -> FirstName varchar(20),
    -> LastName varchar(20)
    -> );
Query OK, 0 rows affected (0.55 sec)

mysql> insert into DemoTable1405 values('  Chris', ' Brown ');
mysql> insert into DemoTable1405 values('David   ', ' Miller ');
mysql> insert into DemoTable1405 values('  Carol ', ' Taylor ');

ข้อมูลก่อน TRIM

+------------------+----------------+
| FirstName        | LastName       |
+------------------+----------------+
|   Chris          |  Brown         |
| David            |  Miller        |
|   Carol          |  Taylor        |
+------------------+----------------+

คำสั่ง UPDATE TRIM ทั้งสองคอลัมน์

mysql> update DemoTable1405 
    -> set FirstName = trim(FirstName), LastName = trim(LastName);
Query OK, 3 rows affected (0.18 sec)
Rows matched: 3  Changed: 3  Warnings: 0

ข้อมูลหลัง TRIM

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Chris     | Brown    |
| David     | Miller   |
| Carol     | Taylor   |
+-----------+----------+

รูปแบบ TRIM ต่างๆ

การทำความสะอาดข้อมูลล่วงหน้า (Prevention)

  • Application level: trim() ก่อน INSERT/UPDATE
  • Database level: Trigger BEFORE INSERT/UPDATE:
    CREATE TRIGGER trim_names_before_insert
    BEFORE INSERT ON DemoTable1405
    FOR EACH ROW
    SET NEW.FirstName = TRIM(NEW.FirstName),
        NEW.LastName = TRIM(NEW.LastName);
  • Constraint: CHECK (FirstName = TRIM(FirstName)) (MySQL 8.0.16+)

หมายเหตุ: TRIM() ลบเฉพาะ space (ASCII 32) ไม่ลบ tab, newline, carriage return หากต้องการลบทุก whitespace ใช้ REGEXP_REPLACE(col, '[[:space:]]+$', '') (MySQL 8.0+) หรือจัดการที่ application layer

ฟังก์ชันคำอธิบายตัวอย่าง
TRIM(str)ลบช่องว่างทั้งหน้าและหลังTRIM(' abc ') → 'abc'
LTRIM(str)ลบช่องว่างหน้า (leading)LTRIM(' abc') → 'abc'
RTRIM(str)ลบช่องว่างหลัง (trailing)RTRIM('abc ') → 'abc'
TRIM(BOTH 'x' FROM str)ลบตัวอักษร 'x' ทั้งหน้าและหลังTRIM(BOTH 'x' FROM 'xxabcxx') → 'abc'
TRIM(LEADING 'x' FROM str)ลบ 'x' หน้าเท่านั้นTRIM(LEADING '0' FROM '00123') → '123'
TRIM(TRAILING 'x' FROM str)ลบ 'x' หลังเท่านั้นTRIM(TRAILING '.' FROM 'file..') → 'file'