はじめに
コジマです。
文字列型に数値が入っているのをそのままORDER BYすると文字列として処理され、辞書順に並んでしまいます。
/* 1,10,2,20,3,5 の順で並ぶ */ WITH str_numbers AS ( SELECT '1' id UNION ALL SELECT '2' id UNION ALL SELECT '3' id UNION ALL SELECT '5' id UNION ALL SELECT '10' id UNION ALL SELECT '20' id ) SELECT * FROM str_numbers ORDER BY id ;
こういうときは、ORDER BY するときにint型にCASTすることで解決します。
/* 1,2,3,5,10,20 の順で並ぶ */ WITH str_numbers AS ( SELECT '1' id UNION ALL SELECT '2' id UNION ALL SELECT '3' id UNION ALL SELECT '5' id UNION ALL SELECT '10' id UNION ALL SELECT '20' id ) SELECT * FROM str_numbers -- intにCASTする ORDER BY CAST(id as int) ;
さいごに
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。