以前弊社で構築したMySQLを使用したシステムがあるのですが、
本日はそのシステムの部分改修の依頼を受けたので、
対応していました。
その際に、
数字データを保存しているある項目でソートして該当レコードを取得する処理が必要だったのですが、
ちょっとした問題が発生しました。
ソートに使用したい項目がVarcharで作成されていた為に、
上手く並び替えが行えないという、
何とも残念な結果に。。。
例えば、
| 10 |
| 2 |
| 1 |
| 15 |
というデータがあったとして、
昇順で並び替える場合には、
================
1, 2, 10, 15
================
という結果が欲しいのですが、
実際には、
文字列として扱われてしまうために、
================
1, 10, 15, 2
================
という結果が返ってきてしまいます。
こんな場合にはカラムを数値型に変更してしまいたいのですが、
制作者が何かの意図があって「Varchar」にしている可能性あり、
怖いので、
それは却下となりました。
仕方ないので、
CAST関数を使って対応することに。
その場合のSQLは、
select * from データベース名 order by cast(カラム名 as signed)
となります。
もしくは、
select * from データベース名 order by カラム名 + 0
というように、
「カラム名 + 0」
としても、
同じ結果が得られるようです。
この記事へのコメントはありません。