0

MSSQL Server 2005 には VARCHAR としてテーブルのフィールドがあります。「A、B、C、D ... 1、2、3、...、10、11、12」などの英数字の値が含まれています。

以下のコードを使用する場合;

....   
ORDER BY TableFiledName

11,12,1,2,3等の注文結果は以下の通りです。

以下のコードを使用すると、

....   
 ORDER BY
    CASE WHEN ISNUMERIC(TableFiledName) = 0 THEN CAST(TableFiledNameAS INT) ELSE TableFiledName END

以下のようなエラー メッセージが表示されます。

メッセージ 8114、レベル 16、状態 5、行 1 データ型 varchar から float への変換エラー。

1,2,3,4,5,6,7,8,9,10,11,12 などの順序付け結果を取得するにはどうすればよいでしょうか。

前もって感謝します。

4

1 に答える 1

4

ISNUMERICフィールドが数値の場合は1を返します。

だからあなたの最初の問題はそれが...

   CASE WHEN ISNUMERIC(TableFiledName) = 1 THEN 

しかし、これだけでは機能しません。

値の前にゼロを付けて、右端をとる必要があります

 order by 
      case when ISNUMERIC(FieldName) =1 
      then right('000000000'+FieldName, 5)
      else FieldName 
      end

5を使用すると、99999までの番号が可能になります。番号が大きい場合は、その番号を増やしてください。

これにより、文字の前に数字が表示されます。数字の前に文字が必要な場合はisnumeric、並べ替え順序にを追加できます。つまり、次のようになります。

 order by
      isnumeric(FieldName),
      case...

これは小数には対応しませんが、あなたはそれらについて言及していません

于 2012-11-05T10:41:16.347 に答える