我有混合数据i nvarchar列(单词和数字).这是以数字顺序对此列中的数据进行排序的最快方法.
结果示例:
1
2
3
...
10
11
...
AAAA
AAAB
b
BA
BA
...
angry person.. 11
用这个:
ORDER BY CASE WHEN ISNUMERIC(column) = 1 THEN 0 ELSE 1 END, CASE WHEN ISNUMERIC(column) = 1 THEN CAST(column AS INT) ELSE 0 END, column
这按预期工作.
注意:你说最快的方式.这个sql对我来说很快就会产生,但是执行计划显示了一个表扫描,然后是一个标量计算.这可能会产生一个临时结果,其中包含该列的所有值以及ISNUMERIC结果的一些额外临时列.它可能没有快速执行.
用这个:
ORDER BY CASE WHEN ISNUMERIC(column) = 1 THEN 0 ELSE 1 END, CASE WHEN ISNUMERIC(column) = 1 THEN CAST(column AS INT) ELSE 0 END, column
这按预期工作.
注意:你说最快的方式.这个sql对我来说很快就会产生,但是执行计划显示了一个表扫描,然后是一个标量计算.这可能会产生一个临时结果,其中包含该列的所有值以及ISNUMERIC结果的一些额外临时列.它可能没有快速执行.