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

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

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

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

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

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

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

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

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

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

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

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

 

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>