ChannelDB2

บ่อยครั้งที่เราใช้ keyword LIKE ในการ select ข้อมูลจาก Database แบบ wildcard หลายๆคนคงคุ้นเคยกันดี แต่วันนี้ผมขอมา
แนะนำการใช้งาน keyword LIKE ของ DB2 อีกครั้ง ลองดูกันนะครับว่ามีอะไรน่าสนใจบ้าง

>------------- LIKE ------------ pattern ----------------------------------->
| |
----- ESCAPE --------- pattern ----


โดย escape character ของ LIKE ใน DB2 คือ

1. % มีค่าเท่ากับตัวอักษรอะไรก็ได้จำนวน 0 หรือมากว่า
2. _ มีค่าเท่ากับตัวอักษรอะไรก็ได้จำนวน 1 ตัว

ตัวอย่างเช่น

DATA
----------
X
XX_
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'

Views: 299

Comment

You need to be a member of ChannelDB2 to add comments!

Join ChannelDB2

Featured Downloads

Try BLU Acceleration on Cloud

© 2019   Created by channeldb2.   Powered by

Badges  |  Report an Issue  |  Terms of Service