0

列の順序を決める必要がありnvarcharます。問題は、列に同じ入力パターンがないことです。列のいくつかの行の例は次のとおりです。

12    
9     
TEF      
78F    
T2R

この列を order By 句でソートする方法は? 私が持っている唯一の救済は、この列に数字と英数字のみが含まれていることです.

4

3 に答える 3

5
ORDER BY
   RIGHT(REPLICATE(N' ', 500) + MyValue, 500)

そう

9
12
78F
T2R
TEF 

になる

            9
           12
          78F
          T2R
          TEF 

どちらが正しくソートされますか

ISNUMERIC に頼ることはできません

于 2010-12-09T11:39:56.417 に答える
2
select
    *
from
    table
order by
    CASE
       WHEN not column like '%[^0-9]%' THEN CONVERT(int,column)
       WHEN column like '[0-9]%' THEN CONVERT(int,SUBSTRING(column,1,PATINDEX('%[A-Z]%',column)-1))
    END,
    CASE
       WHEN not column like '%[^0-9]%' THEN NULL
       WHEN column like '[0-9]%' THEN SUBSTRING(column,PATINDEX('%[A-Z]%',column),9000)
       ELSE column
    END
于 2010-12-09T11:39:40.930 に答える
0

あなたの問題は、数字とテキストが正しくソートされていないことだと思います。

この記事では、1 つのアプローチについて説明します。

数値を含む SQL サーバーで VARCHAR 列をソートするにはどうすればよいですか?

記事から:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end
于 2010-12-09T11:34:53.497 に答える