我正在尝试排列一个具有如下值的列:
1 test
amazon
11 basic
2 hi
02toad
ikea
22
burger
002 paper
我希望他们是这样安排的:
1 test
2 hi
002 paper
02toad
11 basic
22
amazon
burger
ikea
所以我想要的是先按数字排序,然后按文本排序。并不是所有值都包含数字,也不是所有值都包含文本。
发布于 2017-03-15 22:05:17
在SQL Server中,您想要做的事情很棘手,但您可以做到:
order by try_convert(bigint, left(col, patindex('%[^0-9]%', col + 'x'))),
col
您需要将前导数字转换为数字才能工作,因为您的排序将初始数字视为数字。
这实际上是把字母放在数字之前。这很容易用另一个密钥来解决:
order by (case when col like '[0-9]%' then 1 else 2 end),
try_convert(bigint, left(col, patindex('%[^0-9]%', col + 'x'))),
col
通常,如果您试图将字符串开头的数字解释为数字,则可能需要将该值放在不同的列中。换句话说,您也可以考虑修复数据模型。
https://stackoverflow.com/questions/42811875
复制相似问题