- SELECT * FROM sample
- ORDER BY ID
結果 (SQL Server 2005 検証環境)
ID |
---|
1 |
2 |
20 |
2A |
3 |
3123 |
4 |
A1 |
AA1 |
2、の次に20、3と続いてる。これでは適切なソートとはいい難い。
そこで、先ほどのSQL文に一工夫。
- SELECT * FROM sample
- ORDER BY
- CASE WHEN ISNUMERIC(ID) = 1 THEN
- REPLICATE('0', 10 - LEN(ID)) + ID
- ELSE
- ID
- END
結果 (SQL Server 2005 検証環境)
ID |
---|
1 |
2 |
3 |
4 |
20 |
3123 |
2A |
A1 |
AA1 |
と、思った通りにソートされました。めでたしめでたし。
最後に今回使用した関数を簡単に説明します。
ISNUMERIC(): 引数の値を数値に変換可能かを返します。
1:数値変換可能 0:それ以外
REPLICATE(,): 文字を指定された回数繰り返します。
第1引数に繰り返したい文字、第2引数に繰り返し回数を指定します。
0 件のコメント:
コメントを投稿