2009年7月15日水曜日

【SQL】文字列文字列・数値混在データソート

SQL Serverにおいて、数字とアルファベットが混在している列を単にソートすると以下のようになります。

  1. SELECT * FROM sample  
  2. ORDER BY ID  


結果 (SQL Server 2005 検証環境)
ID
1
2
20
2A
3
3123
4
A1
AA1


2、の次に20、3と続いてる。これでは適切なソートとはいい難い。

そこで、先ほどのSQL文に一工夫。

  1. SELECT * FROM sample  
  2. ORDER BY  
  3. CASE WHEN ISNUMERIC(ID) = 1 THEN  
  4. REPLICATE('0', 10 - LEN(ID)) + ID  
  5. ELSE  
  6. ID  
  7. END  


結果 (SQL Server 2005 検証環境)
ID
1
2
3
4
20
3123
2A
A1
AA1


と、思った通りにソートされました。めでたしめでたし。


最後に今回使用した関数を簡単に説明します。
ISNUMERIC(): 引数の値を数値に変換可能かを返します。
       1:数値変換可能 0:それ以外
REPLICATE(,): 文字を指定された回数繰り返します。
       第1引数に繰り返したい文字、第2引数に繰り返し回数を指定します。

0 件のコメント:

コメントを投稿