MySQL มีฟังก์ชัน STRCMP(str1, str2) สำหรับเปรียบเทียบสตริง 2 ค่า คืนค่าเป็นตัวเลขตามเงื่อนไข
กฎการคืนค่า
| เงื่อนไข | ค่าที่คืน | ความหมาย |
|---|---|---|
| str1 = str2 | 0 | เท่ากัน |
| str1 < str2 (Lexicographically) | -1 | str1 น้อยกว่า str2 |
| str1 > str2 (Lexicographically) | 1 | str1 มากกว่า str2 |
ตัวอย่างการใช้งาน
Case 1: สตริงเท่ากัน
SELECT STRCMP('demo', 'demo');
-- ผลลัพธ์: 0
Case 2: str1 น้อยกว่า str2
SELECT STRCMP('demo', 'demo1234');
-- ผลลัพธ์: -1
Case 3: str1 มากกว่า str2
SELECT STRCMP('demo1', 'demo');
-- ผลลัพธ์: 1
การประยุกต์ใช้
1. เรียงลำดับแบบ Custom
SELECT * FROM products
ORDER BY STRCMP(category, 'premium'), name;
2. เงื่อนไขใน WHERE
SELECT * FROM users
WHERE STRCMP(status, 'active') = 0;
3. Case-Insensitive Comparison (ใช้ COLLATE)
SELECT STRCMP('ABC', 'abc'); -- ผลลัพธ์: -1 (Case-sensitive)
SELECT STRCMP('ABC', 'abc' COLLATE utf8mb4_general_ci); -- ผลลัพธ์: 0
ฟังก์ชันคล้ายคลึง
strcmp()- เปรียบเทียบแบบ Binary (Case-sensitive)STRCMP()- เหมือน strcmp แต่เป็น Function ชื่อใหญ่LIKE- Pattern MatchingSOUNDEX()- เปรียบเทียบเสียง (Phonetic)LEVENSHTEIN()- ต้องติดตั้ง Plugin (Edit Distance)
ข้อจำกัด
- เปรียบเทียบได้แค่ 2 ค่า ตรงๆ ไม่รองรับ Fuzzy Match
- Case-sensitive โดย Default (ขึ้นกับ Collation)
- ไม่ใช่ Similarity Score (0-100%) ใช้ Full-text Search หรือ Algorithm อื่นแทน