การค้นหาข้อมูลที่ไม่ขึ้นต้นด้วยสระด้วย RLIKE (REGEXP)
ใช้ RLIKE (หรือ REGEXP) พร้อม Regular Expression เพื่อกรองชื่อเมืองที่ไม่ขึ้นต้นด้วย A, E, I, O, U (พิมพ์เล็ก/ใหญ่)
ไวยากรณ์
SELECT DISTINCT yourCityColumn
FROM yourTableName
WHERE yourCityColumn NOT RLIKE '^[AEIOUaeiou].*$';
คำอธิบาย Regular Expression
| ส่วน | ความหมาย |
|---|---|
^ | จุดเริ่มต้นของสตริง |
[AEIOUaeiou] | ชุดตัวอักษร: A,E,I,O,U,a,e,i,o,u |
.* | ตัวอักษรใดๆ จำนวน 0 หรือมาก |
$ | จุดสิ้นสุดของสตริง |
ตัวอย่างการใช้งาน
สร้างตารางพนักงานและเมือง:
CREATE TABLE Employee_Information (
Id INT NOT NULL AUTO_INCREMENT,
EmployeeName VARCHAR(20),
CityName VARCHAR(20),
PRIMARY KEY(Id)
);
เพิ่มข้อมูลทดสอบ:
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Larry', 'New York');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Sam', 'Indianapolis');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Carol', 'El Paso');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('John', 'Austin');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Mike', 'Denver');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('David', 'Las Vegas');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('James', 'Albuquerque');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Robert', 'Portland');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Richard', 'Irvine');
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES('Michael', 'Garland');
ค้นหาเมืองที่ไม่ขึ้นต้นด้วยสระ:
SELECT DISTINCT CityName
FROM Employee_Information
WHERE CityName NOT RLIKE '^[AEIOUaeiou].*$';
ผลลัพธ์:
+-----------+
| CityName |
+-----------+
| New York |
| Denver |
| Las Vegas |
| Portland |
| Garland |
+-----------+
วิธีอื่น: ใช้ LEFT() และ NOT IN
SELECT DISTINCT CityName
FROM Employee_Information
WHERE UPPER(LEFT(CityName, 1)) NOT IN ('A','E','I','O','U');
ประสิทธิภาพ
RLIKE/REGEXP- อ่านง่าย แต่ช้ากว่า (ไม่ใช้ index ได้เต็มที่)LEFT() + NOT IN- เร็วกว่า อาจใช้ index ได้หากมี functional index (MySQL 8.0+)- สำหรับข้อมูลเยอะ แนะนำเพิ่มคอลัมน์
first_letter CHAR(1)และ index คอลัมน์นั้น