您的WHERe陈述很复杂。
看来您想按整数顺序对所有前导数字进行排序,然后再对其余部分进行排序。如果是这样,则应将其作为单独的子句进行操作,而不是尝试一并完成。您遇到的特定问题是,您只允许输入一个数字,而不是两个或多个。(并且没有两个这样的东西。)
这是您的修复,以及一个SQLFiddle,对您的ORDER
BY使用了两个单独的计算列测试。(请注意,这假定的数字部分
asdNumNew将适合
T-SQLint。如果不正确,则需要在第一个ELSE上调整CAST和最大值。)
SELECt * FROM viewASDORDER BY CASE WHEN ISNUMERIC(asdNumNew)=1 THEN CAST(asdNumNew as int) WHEN PATINDEX('%[^0-9]%',asdNumNew) > 1 THEN CAST( LEFt( asdNumNew, PATINDEX('%[^0-9]%',asdNumNew) - 1 ) as int) ELSE 2147483648END,CASE WHEN ISNUMERIC(asdNumNew)=1 THEN NULL WHEN PATINDEX('%[^0-9]%',asdNumNew) > 1 THEN SUBSTRINg( asdNumNew, PATINDEX('%[^0-9]%',asdNumNew) , 50 ) ELSE asdNumNewEND


