列の順序を決める必要がありnvarchar
ます。問題は、列に同じ入力パターンがないことです。列のいくつかの行の例は次のとおりです。
12
9
TEF
78F
T2R
この列を order By 句でソートする方法は? 私が持っている唯一の救済は、この列に数字と英数字のみが含まれていることです.
列の順序を決める必要がありnvarchar
ます。問題は、列に同じ入力パターンがないことです。列のいくつかの行の例は次のとおりです。
12
9
TEF
78F
T2R
この列を order By 句でソートする方法は? 私が持っている唯一の救済は、この列に数字と英数字のみが含まれていることです.
ORDER BY
RIGHT(REPLICATE(N' ', 500) + MyValue, 500)
そう
9
12
78F
T2R
TEF
になる
9
12
78F
T2R
TEF
どちらが正しくソートされますか
ISNUMERIC に頼ることはできません
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
あなたの問題は、数字とテキストが正しくソートされていないことだと思います。
この記事では、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