บ่อยครั้งที่เราใช้ keyword LIKE ในการ select ข้อมูลจาก Database แบบ wildcard หลายๆคนคงคุ้นเคยกันดี แต่วันนี้ผมขอมาแนะนำการใช้งาน keyword LIKE ของ DB2 อีกครั้ง ลองดูกันนะครับว่ามีอะไรน่าสนใจบ้าง
>------------- LIKE ------------ pattern ----------------------------------->
| |
----- ESCAPE --------- pattern ----
โดย escape character ของ LIKE ใน DB2 คือ
1. % มีค่าเท่ากับตัวอักษรอะไรก็ได้จำนวน 0 หรือมากว่า
2. _ มีค่าเท่ากับตัวอักษรอะไรก็ได้จำนวน 1 ตัว
ตัวอย่างเช่น
DATA----------XXX_XXX
SELECT * FROM TABLE WHERE DATA LIKE 'X%'
SQL statement ข้างต้นหมายความว่า จะเอา DATA ทุกตัวที่ขึ้นต้นด้วย X ขึ้นมาแสดงผล ดังนั้นผลลัพธ์จาก SQL statement นี้จะได้ เป็น X, XX_, XXX
SELECT * FROM TABLE WHERE DATA LIKE 'XX%'
SQL statement ข้างต้นหมายความว่า จะเอา DATA ทุกตัวที่ขึ้นต้นด้วย XX ขึ้นมาแสดงผล ดังนั้นผลลัพธ์จาก SQL statement นี้จะได้ เป็น XX_, XXX
SELECT * FROM TABLE WHERE DATA LIKE '%X'
SQL statement ข้างต้นหมายความว่า จะเอา DATA ทุกตัวที่ลงท้ายด้วย X ขึ้นมาแสดงผล ดังนั้นผลลัพธ์จาก SQL statement นี้จะได้ เป็น X, XXX
SELECT * FROM TABLE WHERE DATA LIKE 'XX_'
SQL statement ข้างต้นหมายความว่า จะเอา DATA ทุกตัวที่ขึ้นต้นด้วย XX และลงท้ายด้วยอะไรก็ได้ 1 ตัวขึ้นมาแสดงผล ดังนั้นผลลัพธ์จาก SQL statement นี้จะได้ เป็น XX_, XXX
SELECT * FROM TABLE WHERE DATA LIKE '_'
SQL statement ข้างต้นหมายความว่า จะเอา DATA ทุกตัวที่มีตัวอักษรอะไรก็ได้ 1 ตัวขึ้นมาแสดงผล ดังนั้นผลลัพธ์จาก SQL statement นี้จะได้ เป็น X
มาถึงตรงนี้ถ้าเราต้องการให้ XX_ เท่านั้นขึ้นมาแสดงล่ะครับต้องทำไง ????
คำตอบคือเราต้องใช้ keyword เพิ่มเติมครับคือ ESCAPE เนื่องจาก _ เป็น escape character ของ LIKE ดังที่กล่าวไว้แล้วข้างต้น
เอาล่ะครับ มาดูวิธีการใช้ ESCAPE กันต่อเลย
การใช้นั้นไม่ยากครับ DB2 จะมองว่าอักขระทุกตัวที่อยู่เป็นคู่กับ อักขระที่ระบุไว้ใน ESCAPE เป็นอักขระที่ต้องการความหมายนั้นจริงๆ จะไม่นำไปใช้ในความหมายอื่นๆ
ดังตัวอย่างต่อไปนี้ครับ
SELECT * FROM TABLE WHERE DATA LIKE 'XX+_' ESCAPE '+'
หมายความว่าอักขระอะไรคู่กับเครื่องหมาย + อักขระนั้น DB2 จะมองว่าเป็นอักขระจริงๆ ง่ายๆก็คือว่าถ้า _ อยู่หลัง + ก็จะถูกมองว่าเป็น _ ไม่ใช้ ตัวอักษรอะไรก็ได้หนึ่งตัวดังนั้น ผลลัพธ์ของ SQL statement นี้ก็จะได้เป็น XX_ ตามที่เราต้องการ หรือเราอาจจะใช้อักขระอื่นในการทำเป็นคู่ของอักขระพิเศษก็ได้ครับ ที่เป็นแบบนี้เพราะให้เราสามารถใส่ตัวอักษรใน LIKE ได้หลากหลายขึ้น เพราะถ้า DB2 กำหนดว่าอะไรตามหลังบวกจะมองว่าเป็นอักขระจริงๆ แล้วถ้าเราต้องการ select ข้อมูลที่มี + ละต้องทำยังไง ++ ? อันนี้อาจจะทำให้ดูยาก เอาล่ะครับ นั้นหมายความว่าเราถ้าเราใช้ SQL statement ต่อไปนี้ ก็จะได้ผลลัพธ์เป็น XX_ เหมือนกัน
SELECT * FROM TABLE WHERE DATA LIKE 'XXa_' ESCAPE 'a'
No comments:
Post a Comment