只是好奇,是否有可能实现这种排序:
X5
X30
而不是由于开箱即用而导致的结果。订购:
X30
X5
答案 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
这将提供"错误"结果如果不满足假设(例如,如果缺少非数字部分,或者在数字部分之后还有另一个字符串部分,等等)。