การเรียง sql order แบบตัวเลขพร้อมตัวอักษร

จากบทความก่อนหน้านี้ที่เรียง sql แบบตัวเลขไปแล้ว ยังมีอีกกรณีหนึ่งที่ computer กับ มนุษย์เข้าใจไม่เหมือนกัน คือข้อมูลที่มีทั้งตัวอักษร (text) และตัวเลข (numeric) หรือเรียกว่า alphanumeric ในช่องที่เป็น varchar/text.

ตัวอย่างที่เรียกใช้แบบธรรมดา

SELECT * FROM `products` ORDER BY `product_name` ASC

แบบนี้ จะได้ผลลัพธ์ออกมาเป็น

หนังสือเล่ม 1 ...ไปจนถึง หนังสือเล่ม 19
หนังสือเล่ม 2 ...ไปจนถึง หนังสือเล่ม 29

ให้แก้ไขเป็น

SELECT * FROM `products` ORDER BY LENGTH(`product_name`) ASC, `product_name` ASC

จะได้ผลลัพธ์ที่ถูกต้อง คือ

หนังสือเล่ม 1
หนังสือเล่ม 2
หนังสือเล่ม 3 ... ไปเรื่อยๆ

ซึ่งคำสั่ง LENGTH() เป็นการคืนค่าใน field นั้นๆออกมาเป็น byte ทำให้ผลลัพธ์ถูกต้อง และเท่าที่ใช้งานมายังไม่พบความผิดพลาดประการใด.

อ้างอิงจาก https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.