Giới thiệu
Dùng TRIM() loại bỏ khoảng trắng đầu/cuối, kết hợp COALESCE xử lý NULL, để tìm hàng mà cột FirstName thực chất rỗng (chỉ space hoặc NULL).
Ví dụ thực hành
1. Tạo bảng DemoTable826
mysql> CREATE TABLE DemoTable826 (
FirstName VARCHAR(100),
Age INT
);
2. Chèn dữ liệu (có hàng FirstName = ' ' — một space)
mysql> INSERT INTO DemoTable826 VALUES (' ',24),(' ',22),('Chris',26),('Robert',27);
Lưu ý: Bài viết gốc output hiển thị 'Adam' nhưng INSERT không có Adam — có thể lỗi copy. Ta tập trung vào logic.
3. Tìm hàng FirstName rỗng/whitespace/NULL
mysql> SELECT * FROM DemoTable826
WHERE COALESCE(TRIM(FirstName), '') = '';
4. Kết quả
+-----------+------+
| FirstName | Age |
+-----------+------+
| | 24 |
| | 22 |
+-----------+------+
Giải thích
TRIM(FirstName): Xóa space đầu/cuối.' '→''.'Chris'→'Chris'.COALESCE(..., ''): NếuTRIMtrả về NULL (do FirstName=NULL) → chuyển thành''.- So sánh
= ''bắt cả chuỗi rỗng và NULL.
Các cách tương đương
-- Cách 1: TRIM + COALESCE (bài viết)
WHERE COALESCE(TRIM(FirstName), '') = ''
-- Cách 2: CASE (rõ ràng)
WHERE CASE WHEN FirstName IS NULL THEN 1 WHEN TRIM(FirstName) = '' THEN 1 ELSE 0 END = 1
-- Cách 3: REGEXP (MySQL 8.0+)
WHERE FirstName REGEXP '^[[:space:]]*$' OR FirstName IS NULL
-- Cách 4: LENGTH(TRIM()) = 0
WHERE LENGTH(TRIM(COALESCE(FirstName, ''))) = 0
Lưu ý
TRIM()mặc định xóa space (0x20). Không xóa tab, newline → dùngTRIM(BOTH '\t' FROM ...)nếu cần.- Index không dùng được cho
TRIM(col) = ''. Cần generated columnclean_name = TRIM(FirstName)+ index nếu truy vấn thường xuyên. - Thiết kế tốt:
CHECK (TRIM(FirstName) != '')(MySQL 8.0.16+) hoặc trigger ngăn chặn insert whitespace-only.