19 กันยายน 2561

SQL Server - LIKE กับภาษาไทย

ลาเราทำการคิวรีเพื่อสอบถามข้อมูลแบบไม่เจาะจง เช่น ต้องการสอบถามข้อมูลที่ขึ้นต้นด้วย "ก"  ส่วนใหญ่ก็จะใช้ วลีคำสั่ง LIKE เช่น

            SELECT [id], [name] FROM [TESTDB].[dbo].[TABLE01] WHERE [name] LIKE "ก%"

จากคำสั่งข้างต้น เราจะเห็นว่า ข้อมูลที่เป็นภาษาไทยที่ขึ้นต้นด้วย ก ก็น่าจะออกมาแสดงทั้งหมด แต่ท่านทราบไหมว่า ภาษาไทย คำว่า "เกษม"  เราก็ถือว่าขึ้นต้นด้วย "ก" แต่ผลลัพธ์ของที่ได้จากคำสั่งข้างต้น กลับไม่สามารถหาคำว่า เกษม เจอ  ...... คราวนี้ก็ยุ่งซิ ต้องการข้อมูลแต่กลับได้ออกมาไม่ตรง แล้วจะทำไงดี...... เราก็ต้องประยุกต์คำสั่งอื่นมาใช้แทน โดยอาศัยคำสั่ง CHARINDEX กับ COLLATE THAI_BIN มาช่วย ดังตัวอย่างตามภาพด้านล่าง


จากการทดสอบคำสั่งทั้ง 2 รูปแบบ ผลที่ได้ออกมาต่างกัน ดังนั้น หากต้องการสอบถามข้อมูลภาษาไทย ก็สามารถใช้ CHARINDEX เข้ามาช่วยได้

เช่น ถ้าต้องการหาข้อความ "ก"  ณ.ตำแหน่งใด ๆ ก็ได้  ให้ใช้

     CHARINDEX('ก',[ชื่อคอลัมน์] COLLATE THAI_BIN) > 0

หรือ  ถ้าต้องการหาข้อความ "ก"  ณ.ตำแหน่งเริ่มต้น  ให้ใช้

     CHARINDEX('ก',[ชื่อคอลัมน์] COLLATE THAI_BIN) BETWEEN 1 AND 2

เราสามารถนำไปประยุกต์ใช้ได้อีกหลากหลายตามต้องการ
สำหรับตัวอย่างที่กล่าวมาจะไม่คำนึงถึงความเร็วในการประมวลผล แต่ต้องการค่าที่ถูกต้องและตรงกับสิ่งที่ต้องการ

สวัสดี ฝนตกเยอะจริงปีนี้
"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.