การใช้ LEFT() ดึงส่วนหน้าของสตริงก่อนเครื่องหมายทับ (Slash)
LEFT(str, len) คืนค่า len ตัวอักษรแรกของสตริง ใช้ได้เมื่อตำแหน่ง slash คงที่ (Fixed position)
สร้างตารางและข้อมูล
mysql> create table DemoTable1418 (
-> EmployeeCode text
-> );
Query OK, 0 rows affected (0.51 sec)
mysql> insert into DemoTable1418 values('EMP-2110/Carol');
mysql> insert into DemoTable1418 values('EMP-1900/David');
mysql> insert into DemoTable1418 values('EMP-2345/Mike');
ข้อมูลทั้งหมด
+----------------+ | EmployeeCode | +----------------+ | EMP-2110/Carol | | EMP-1900/David | | EMP-2345/Mike | +----------------+
คำสั่ง LEFT(EmployeeCode, 8)
mysql> select left(EmployeeCode, 8) from DemoTable1418;
ผลลัพธ์
+----------------------+ | left(EmployeeCode, 8) | +----------------------+ | EMP-2110 | | EMP-1900 | | EMP-2345 | +----------------------+
ข้อจำกัดของ LEFT()
ทำงานได้ก็ต่อเมื่อ ส่วนหน้ามีความยาวคงที่ (ที่นี่คือ 8 ตัวอักษร: EMP-XXXX) หากรหัสพนักงานมีความยาวไม่เท่ากัน (EMP-1, EMP-12345) จะดึงผิด
วิธีที่ยืดหยุ่นกว่า: SUBSTRING_INDEX
SELECT SUBSTRING_INDEX(EmployeeCode, '/', 1) FROM DemoTable1418;
ดึงส่วนก่อน slash ตัวแรก ไม่ว่าความยาวจะเป็นเท่าไหร่
วิธีอื่นๆ
| วิธี | คำสั่ง | เหมาะสำหรับ |
|---|---|---|
| LEFT | LEFT(str, 8) | ความยาวคงที่, เร็วที่สุด |
| SUBSTRING_INDEX | SUBSTRING_INDEX(str, '/', 1) | ความยาวไม่คงที่, delimiter ชัดเจน |
| LOCATE + SUBSTRING | SUBSTRING(str, 1, LOCATE('/', str) - 1) | Delimiter เดียว, ต้องการตำแหน่ง |
| REGEXP_SUBSTR (8.0+) | REGEXP_SUBSTR(str, '^[^/]+') | Pattern ซับซ้อน |