Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: ใช้ LEFT() ดึงข้อความก่อนเครื่องหมายทับ (/)

การใช้ 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 ตัวแรก ไม่ว่าความยาวจะเป็นเท่าไหร่

วิธีอื่นๆ

กรณีมีหลาย Slash: EMP-2110/DEPT/IT

-- ดึงส่วนแรก (EMP-2110)
SUBSTRING_INDEX(EmployeeCode, '/', 1)

-- ดึงส่วนกลาง (DEPT)
SUBSTRING_INDEX(SUBSTRING_INDEX(EmployeeCode, '/', 2), '/', -1)

-- ดึงส่วนหลัง (IT)
SUBSTRING_INDEX(EmployeeCode, '/', -1)

แนะนำ: ใช้ SUBSTRING_INDEX เป็นหลัก เพราะยืดหยุ่น อ่านง่าย และทำงานถูกต้องกับ delimiter-based format

วิธีคำสั่งเหมาะสำหรับ
LEFTLEFT(str, 8)ความยาวคงที่, เร็วที่สุด
SUBSTRING_INDEXSUBSTRING_INDEX(str, '/', 1)ความยาวไม่คงที่, delimiter ชัดเจน
LOCATE + SUBSTRINGSUBSTRING(str, 1, LOCATE('/', str) - 1)Delimiter เดียว, ต้องการตำแหน่ง
REGEXP_SUBSTR (8.0+)REGEXP_SUBSTR(str, '^[^/]+')Pattern ซับซ้อน