Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: DISTINCT không phân biệt chữ hoa/thường (Case-insensitive)

Mặc định DISTINCT trong MySQL phân biệt chữ hoa/thường (case-sensitive tùy collation). Để distinct case-insensitive, áp dụng UPPER() hoặc LOWER() trước khi distinct.

Cú pháp

-- Cách 1: UPPER
SELECT DISTINCT UPPER(ten_cot) FROM ten_bang;

-- Cách 2: LOWER
SELECT DISTINCT LOWER(ten_cot) FROM ten_bang;

Ví dụ minh họa

Tạo bảng email (có trùng lặp khác case):

mysql> CREATE TABLE DistinctKhongPhanBietCase (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> Email VARCHAR(30),
    -> MatKhau VARCHAR(10),
    -> PRIMARY KEY(Id)
    -> );

Chèn dữ liệu:

mysql> INSERT INTO DistinctKhongPhanBietCase(Email, MatKhau) VALUES
    -> ('John@gmail.com', 'john123'),
    -> ('john@gmail.com', '654321'),
    -> ('Mike@gmail.com', '999999'),
    -> ('mike@gmail.com', '334556'),
    -> ('Carol@gmail.com', '1010101'),
    -> ('Larry@gmail.com', '12345678');

Case 1: DISTINCT UPPER()

mysql> SELECT DISTINCT UPPER(Email) FROM DistinctKhongPhanBietCase;
+--------------------+
| UPPER(Email)       |
+--------------------+
| JOHN@GMAIL.COM     |
| MIKE@GMAIL.COM     |
| CAROL@GMAIL.COM    |
| LARRY@GMAIL.COM    |
+--------------------+

Case 2: DISTINCT LOWER()

mysql> SELECT DISTINCT LOWER(Email) FROM DistinctKhongPhanBietCase;
+--------------------+
| LOWER(Email)       |
+--------------------+
| john@gmail.com     |
| mike@gmail.com     |
| carol@gmail.com    |
| larry@gmail.com    |
+--------------------+

Lưu ý: Kết quả trả về đã được chuẩn hóa case. Nếu cần giữ nguyên case gốc của bản ghi đầu tiên, dùng GROUP BY LOWER(cot) kết hợp MIN(cot) hoặc ANY_VALUE(cot) (MySQL 5.7+).