排序以正确数字结尾的字符串

时间:2015-05-23 10:24:40

标签: tsql

只是好奇,是否有可能实现这种排序:

X5
X30

而不是由于开箱即用而导致的结果。订购:

X30
X5

1 个答案:

答案 0 :(得分: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

这将提供"错误"结果如果不满足假设(例如,如果缺少非数字部分,或者在数字部分之后还有另一个字符串部分,等等)。