我需要爲nvarchar
列進行排序。問題是這樣的,列沒有條目相同的模式,列的一些行的例子是Order By子句用於SQL Server中的NVARCHAR列
12
9
TEF
78F
T2R
如何此列由ORDER BY子句排序?我唯一的解釋是這個列只包含數字和字母數字字符。
我需要爲nvarchar
列進行排序。問題是這樣的,列沒有條目相同的模式,列的一些行的例子是Order By子句用於SQL Server中的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
我猜你的問題是它沒有正確地對數字和文本進行排序。
本文介紹了一種方法:
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
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
什麼是你所面臨的問題? `order by`不起作用? –
2010-12-09 11:19:59
@Sachin不,它工作不正常。通過這樣做,感覺它並不是按照記錄排序 – Zerotoinfinity 2010-12-09 11:28:34
那麼它如何對你的示例列進行排序? – 2010-12-09 11:29:39