.## 1. ฟังก์ชัน SUBSTRING คืออะไร?
ฟังก์ชัน SUBSTRING เป็นฟังก์ชันสำคัญของ MySQL ที่ใช้ในการดึงส่วนย่อยของสตริงออกจากสตริงหลัก ด้วยฟังก์ชันนี้คุณสามารถดึงเฉพาะส่วนที่ต้องการจากข้อมูลที่เก็บอยู่ในฐานข้อมูลได้ ตัวอย่างเช่น การดึงส่วนโดเมนจากที่อยู่อีเมลของผู้ใช้ หรือการดึงส่วนเฉพาะจากรหัสสินค้า
- 1 2. การใช้งานพื้นฐานของฟังก์ชัน SUBSTRING
- 2 3. การประยุกต์ใช้จริงของฟังก์ชัน SUBSTRING
- 3 4. การเปรียบเทียบกับฟังก์ชันสตริงอื่น
- 4 5. การใช้งานขั้นสูงและการปรับประสิทธิภาพสำหรับฟังก์ชัน SUBSTRING
- 5 6. ตัวอย่างและแนวปฏิบัติที่ดีที่สุดสำหรับฟังก์ชัน SUBSTRING
- 6 7. การจัดการข้อผิดพลาดและความแตกต่างของเวอร์ชัน
1.1 ไวยากรณ์พื้นฐาน
ไวยากรณ์พื้นฐานของฟังก์ชัน SUBSTRING มีดังนี้
SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
str: สตริงที่ต้องการดึงส่วนย่อยจากpos: ตำแหน่งเริ่มต้น (เริ่มจาก 1)len: จำนวนอักขระที่ต้องการดึง (ไม่บังคับ)
หาก pos มีค่าเป็นบวก MySQL จะนับจากจุดเริ่มต้นของสตริงไปข้างหน้า หากเป็นค่าลบ MySQL จะนับจากท้ายสตริงกลับไป หากไม่ระบุ len MySQL จะดึงจากตำแหน่งที่กำหนดจนถึงจบสตริง
1.2 การใช้งานของฟังก์ชัน SUBSTRING
ฟังก์ชันนี้ใช้เพื่อจัดรูปแบบข้อมูลสตริงและดึงส่วนที่ต้องการออกมา ทำให้การค้นหาและประมวลผลข้อมูลในฐานข้อมูลทำได้ง่ายและมีประสิทธิภาพมากขึ้น
2. การใช้งานพื้นฐานของฟังก์ชัน SUBSTRING
เพื่อทำความเข้าใจพื้นฐาน เรามาดูตัวอย่างง่าย ๆ กัน
2.1 การดึงส่วนของสตริง
คิวรีต่อไปนี้ดึงอักขระ 6 ตัวเริ่มจากอักขระที่ 3 ของสตริง “Hello, World!”
SELECT SUBSTRING('Hello, World!', 3, 6);
ผลลัพธ์คือ "llo, W" เนื่องจาก pos เป็น 3 การดึงจึงเริ่มจากอักขระที่ 3 และ len เป็น 6 ทำให้ดึงอักขระทั้งหมด 6 ตัว
2.2 การละเว้นพารามิเตอร์ความยาว
หากไม่ระบุ len MySQL จะดึงจากตำแหน่งที่กำหนดจนถึงจบสตริง
SELECT SUBSTRING('Hello, World!', 8);
ผลลัพธ์คือ "World!" ซึ่งเป็นการดึงทุกอย่างตั้งแต่ตัวอักษรที่ 8 จนถึงจบสตริง
2.3 การใช้ตำแหน่งเป็นค่าลบ
หากใช้ค่าตำแหน่งเป็นลบ คุณสามารถระบุตำแหน่งจากท้ายสตริงได้
SELECT SUBSTRING('Hello, World!', -5);
คิวรีนี้คืนค่า "orld!" โดยดึงอักขระ 5 ตัวสุดท้ายของสตริง
3. การประยุกต์ใช้จริงของฟังก์ชัน SUBSTRING
ฟังก์ชัน SUBSTRING ถูกใช้บ่อยในงานประมวลผลข้อมูลจริง ต่อไปนี้คือตัวอย่างการใช้งานที่เป็นประโยชน์
3.1 การดึงโดเมนจากที่อยู่อีเมล
โดยการผสาน SUBSTRING กับ LOCATE คุณสามารถดึงส่วนโดเมนจากที่อยู่อีเมลได้
SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;
คิวรีนี้ดึงสตริงหลังเครื่องหมาย “@” และคืนค่าเฉพาะส่วนโดเมนเท่านั้น
3.2 การดึงส่วนของรหัสสินค้า
ตัวอย่างนี้ดึงส่วนเฉพาะของรหัสสินค้า
SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;
ในคิวรีนี้จะดึงอักขระ 4 ตัวเริ่มจากอักขระที่ 5 ของรหัสสินค้าและแสดงเป็นคอลัมน์ใหม่ชื่อ product_id
3.3 การใช้ในซับคิวรี
โดยการผสานกับซับคิวรี คุณสามารถดึงข้อมูลภายใต้เงื่อนไขที่ซับซ้อนได้
SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;
คิวรีนี้ดึงอักขระ 10 ตัวแรกของ description จากสินค้าที่ category เป็น ‘Electronics’

4. การเปรียบเทียบกับฟังก์ชันสตริงอื่น
ฟังก์ชันอื่นที่สามารถใช้ทำงานคล้ายกับ SUBSTRING ได้แก่ LEFT, RIGHT และ SUBSTR
4.1 ฟังก์ชัน LEFT และ RIGHT
LEFT(str, len): ดึงจำนวนอักขระที่ระบุจากจุดเริ่มต้นของสตริงRIGHT(str, len): ดึงจำนวนอักขระที่ระบุจากท้ายสตริงSELECT LEFT('Hello, World!', 5); -- "Hello" SELECT RIGHT('Hello, World!', 6); -- "World!"
ฟังก์ชันเหล่านี้สะดวกเมื่อคุณต้องการดึงส่วนย่อยจากจุดเริ่มต้นหรือจุดสิ้นสุดของสตริง
4.2 ฟังก์ชัน SUBSTR
.
SUBSTR เป็นนามแฝงของ SUBSTRING ดังนั้นจึงสามารถใช้ได้ในลักษณะเดียวกัน
SELECT SUBSTR('Hello, World!', 8); -- "World!"
คิวรีนี้จะคืนค่า "World!" เช่นเดียวกับ SUBSTRING
5. การใช้งานขั้นสูงและการปรับประสิทธิภาพสำหรับฟังก์ชัน SUBSTRING
ส่วนนี้อธิบายการใช้งานขั้นสูงและเทคนิคการปรับประสิทธิภาพเพิ่มเติม
5.1 การปรับประสิทธิภาพการทำงาน
การใช้ SUBSTRING กับชุดข้อมูลขนาดใหญ่อาจส่งผลต่อประสิทธิภาพ หากจำเป็นให้สร้างดัชนีและตรวจสอบแผนการดำเนินคิวรี นอกจากนี้ หากคุณดึงส่วนย่อยเดียวกันบ่อย ๆ ควรพิจารณาแคชผลลัพธ์
5.2 การใช้ในเงื่อนไข WHERE
คุณสามารถใช้ SUBSTRING ในเงื่อนไข WHERE เพื่อกรองระเบียนตามเงื่อนไขส่วนย่อย
SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';
คิวรีนี้ค้นหาผลิตภัณฑ์ที่อักขระ 3 ตัวแรกของ product_code เป็น ‘ABC’
6. ตัวอย่างและแนวปฏิบัติที่ดีที่สุดสำหรับฟังก์ชัน SUBSTRING
นี่คือตัวอย่างการใช้งาน SUBSTRING อย่างเป็นรูปธรรมและแนวปฏิบัติที่ดีที่สุดสำหรับการทำงานจริง
6.1 ตัวอย่างโค้ด
ตัวอย่างต่อไปนี้จะแยกชื่อเต็มของลูกค้าออกเป็นชื่อจริงและนามสกุล
SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;
ในคิวรีนี้ ชื่อและนามสกุลจะถูกดึงจากชื่อเต็มที่คั่นด้วยช่องว่าง
6.2 แนวปฏิบัติที่ดีที่สุด
- ดึงเฉพาะที่คุณต้องการ : ทำให้ความยาวของส่วนย่อยสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อ ลดผลกระทบต่อประสิทธิภาพ
- ใส่ใจประเภทข้อมูล : หากคุณใช้
SUBSTRINGกับข้อมูลเชิงตัวเลข คุณอาจต้องแปลงเป็นสตริงโดยชัดเจน - พิจารณาการใช้ดัชนี : เมื่อใช้
SUBSTRINGในเงื่อนไขWHEREดัชนีอาจไม่ถูกใช้อย่างมีประสิทธิภาพ ดังนั้นควรตรวจสอบประสิทธิภาพของคิวรีอย่างระมัดระวัง
7. การจัดการข้อผิดพลาดและความแตกต่างของเวอร์ชัน
ส่วนนี้ครอบคลุมการจัดการข้อผิดพลาดเมื่อใช้ SUBSTRING และความแตกต่างระหว่างเวอร์ชันของ MySQL
7.1 การจัดการข้อผิดพลาด
หากตำแหน่งที่ระบุอยู่นอกช่วงของสตริง SUBSTRING จะคืนค่าว่าง เนื่องจากนี่ไม่ใช่ข้อผิดพลาด จึงแนะนำให้เพิ่มตรรกะตรวจสอบผลลัพธ์ล่วงหน้าหากจำเป็น
7.2 ความแตกต่างของเวอร์ชัน
ขึ้นอยู่กับเวอร์ชันของ MySQL พฤติกรรมของฟังก์ชัน SUBSTRING อาจแตกต่างกัน ตัวอย่างเช่น เวอร์ชันเก่าบางรุ่นอาจจัดการอักขระหลายไบต์ต่างกัน ตรวจสอบความเข้ากันได้ระหว่างเวอร์ชันและใช้มาตรการที่เหมาะสมเมื่อจำเป็น


