我试图安排一个包含以下值的列:
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
所以我想要的是首先对数字进行排序,然后对文本进行排序。并非所有值都包含数字,并非所有值都包含文本。
答案 0 :(得分:2)
您想要做的事情在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
通常,如果您尝试将字符串的开头的数字解释为数字,那么您可能希望将值放在不同的列中。换句话说,您也可以考虑修复数据模型。