2015-05-23 72 views
-1

只是好奇结束,才有可能实现这一目标的排序:排序字符串以数字正确

X5 
X30 

,而不是该从“开箱即用” ORDER导致BY:

X30 
X5 
+0

看这里:http://stackoverflow.com/questions/1250960/how-to-sort-out-numeric-strings-as-numerics/1250989#1250989 – Guffa

+0

谢谢Guffa。我可以做任何类似于C#的东西( - :但是寻找一个TSQL解决方案。顺便说一句,为什么item_5会在你的答案中跟在file_10后面? – cs0815

+0

如果你有所有值,比如x [number]日期类型(例如int)并将数字从x移到那里,然后通过这个新列进行排序 – Max

回答

1

假设所有值都包含一个可以跟随数字部分的非数字部分,则可以使用类似的方法(使用AdventureWorks2008R2示例数据库):

SELECT Name, 
    LEFT(Name,LEN(Name)-NULLIF(PATINDEX('%[^0-9]%',REVERSE(Name)),0)+1) AS StringPart, 
    CONVERT(FLOAT,RIGHT(Name,NULLIF(PATINDEX('%[^0-9]%',REVERSE(Name)),1))) AS NumericPart 
FROM Production.Product 
ORDER BY StringPart, NumericPart 

如果不符合假设条件(例如,如果非数字部分丢失,或者在数字部分之后存在另一个字符串部分等),这将提供“不正确的”结果。