桁数が異なる数値を含む文字列を"数値を考慮して"ソートする方法
2016/5/15
文書番号:20499
数値を含む文字列を数値を考慮してソートしたいことはよくあると思います。
通常、データベースで文字列型(CHAR や VARCHAR)型の列にある数値は数値のみであっても文字列として扱われますので普通にソートすると以下のようになります。
|
→ |
|
SELECT データ
FROM TAB_A
ORDER BY CONVERT(int,データ)
|
→ |
|
ハイフンの後ろの文字列を取得してそれを数値に変換して判断させてもできそうですが、その方がコスト高そう...
SELECT データ
FROM TAB_A
ORDER BY LEN(データ)
,データ
|
→ |
|
1.文字列の中からハイフンの位置を取得する(CHARINDEX)
2.ハイフンの次にある一文字を取得する(SUBSTRING)
3.その文字が数値かどうかで判断する(ISNUMERIC)
4.文字列の長さで判断する(LEN)
5.最後に通常のソート
というようにするとうまくソートできます。
SELECT データ
FROM TAB_A
ORDER BY ISNUMERIC(SUBSTRING(データ,CHARINDEX('-',データ)+1,1))
,LEN(データ)
,データ
その場合は事前にソートするための情報を列に持っておいた方がいい場合もあるかもしれません。
実際の環境に合わせて試してみてください。