อธิบาย MySQL SUBSTRING(): วิธีดึงส่วนของสตริงด้วยตัวอย่าง

.## 1. ฟังก์ชัน SUBSTRING คืออะไร?

ฟังก์ชัน SUBSTRING เป็นฟังก์ชันสำคัญของ MySQL ที่ใช้ในการดึงส่วนย่อยของสตริงออกจากสตริงหลัก ด้วยฟังก์ชันนี้คุณสามารถดึงเฉพาะส่วนที่ต้องการจากข้อมูลที่เก็บอยู่ในฐานข้อมูลได้ ตัวอย่างเช่น การดึงส่วนโดเมนจากที่อยู่อีเมลของผู้ใช้ หรือการดึงส่วนเฉพาะจากรหัสสินค้า

目次

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 อาจแตกต่างกัน ตัวอย่างเช่น เวอร์ชันเก่าบางรุ่นอาจจัดการอักขระหลายไบต์ต่างกัน ตรวจสอบความเข้ากันได้ระหว่างเวอร์ชันและใช้มาตรการที่เหมาะสมเมื่อจำเป็น