百見は、一聞にしかず

見てもわからない事は、とりあえず聞いてみよう。

SELECT文で数値が入っている文字列フィールドをソートする

f:id:lbblue:20170606182256p:plain

select文で数値が入っている文字列のフィールドをソートした時に思ったような結果にならない。そんな時はありませんか?
例えば、1、2、3、10、5という値が入っているフィールドをソートしたときに、1、2、3、5、10と並んでもらいたいのに、1、10、2、3、5となってしまうことがあります。

原因は数値が文字としてソートされているという事ですね。
分かってしまえば何てこと無いのですが、はまってしまうときもありますよね^^;


ということで対策は、いくつか方法があります。数値を0埋めにして(例:1を01とする)ソートするとか、型を文字列から数値に変換してソートするなのです。


今回は数値に変換してからソートする方法を紹介します。

 

■構文例
select * from [table] order by cast([value] as signed)

 

■解説
order by句のvalueをsigned(符号付の整数)にcastしています。解説になっていませんが、読んで字のごとくですね。。。

 

以上です。如何だったでしょうか。