我需要为nvarchar
列生成订单。问题在于该列没有相同的条目模式,列的某些行的示例是
12
9
TEF
78F
T2R
如何按order By子句对此列进行排序?我唯一的解脱是这个列只包含数字和字母数字字符。
答案 0 :(得分:4)
ORDER BY
RIGHT(REPLICATE(N' ', 500) + MyValue, 500)
所以
9
12
78F
T2R
TEF
变为
9
12
78F
T2R
TEF
哪个会正确排序
你不能依赖ISNUMERIC
答案 1 :(得分: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
答案 2 :(得分:0)
我猜你发的是它没有正确排序数字和文本。
本文解释了一种方法:
How do I sort a VARCHAR column in SQL server that contains numbers?
来自文章:
select MyColumn
from MyTable
order by
case IsNumeric(MyColumn)
when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
else MyColumn
end