ฟังก์ชัน LOCATE() ใช้สำหรับค้นหาตำแหน่งแรกที่ข้อความย่อย (substring) ปรากฏในข้อความหลัก (string) คล้ายกับ INSTR() และ POSITION() แต่สามารถระบุตำแหน่งเริ่มต้นในการค้นหาได้
- ผลลัพธ์จะเป็นตำแหน่งของอักขระตัวแรกที่พบ (เริ่มนับจาก 1)
- หากไม่พบ จะคืนค่า
0 - หาก
substringเป็นค่าว่าง จะคืนค่า1 - หาก
stringหรือsubstringเป็นNULLจะคืนNULL
ประโยชน์ของฟังก์ชัน LOCATE()
- ใช้ตรวจสอบว่า มีคำหรือข้อความย่อยอยู่ในข้อความหลักหรือไม่
- ใช้ร่วมกับ
WHERE,CASE, หรือSUBSTRING()เพื่อทำงานกับข้อความที่ซับซ้อน - มีความสามารถระบุตำแหน่งเริ่มต้น (start position) ได้ เหมาะกับกรณีที่ต้องการข้ามข้อความบางส่วน
รูปแบบการใช้งาน
LOCATE(substring, string [, start_position])
substringคือข้อความย่อยที่ต้องการค้นหาstringคือข้อความหลักstart_position(ไม่บังคับ) คือตำแหน่งในstringที่จะเริ่มต้นค้นหา (เริ่มนับจาก 1)
ตัวอย่างการใช้งาน
SQL
SELECT LOCATE('SQL', 'MySQL Database'); -- ผลลัพธ์: 3
SELECT LOCATE('a', 'banana'); -- ผลลัพธ์: 2 (ตัว a แรก)
SELECT LOCATE('a', 'banana', 3); -- ผลลัพธ์: 4 (เริ่มหาจากตัวที่ 3)
SELECT LOCATE('z', 'banana'); -- ผลลัพธ์: 0 (ไม่พบ)ค้นหาภาพยนตร์ที่มีคำว่า 'ACTION' อยู่ในฟิลด์ description
SQL
SELECT title, description
FROM film
WHERE LOCATE('ACTION', description) > 0
LIMIT 10;- ตรวจสอบว่ามีคำว่า
ACTIONอยู่ในฟิลด์descriptionหรือไม่
หาตำแหน่งคำว่า 'AMAZING' ใน description และดึงข้อความหลังจากนั้น
SQL
SELECT title,
LOCATE('AMAZING', description) AS pos,
SUBSTRING(description, LOCATE('AMAZING', description)) AS after_amazing
FROM film
WHERE LOCATE('AMAZING', description) > 0
LIMIT 5;LOCATE()ให้ตำแหน่งของคำว่าAMAZINGSUBSTRING()ดึงข้อความหลังจากคำนี้