sql排序列,包含数字和文本

时间:2017-03-15 13:56:33

标签: sql sql-server sorting

我试图安排一个包含以下值的列:

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

所以我想要的是首先对数字进行排序,然后对文本进行排序。并非所有值都包含数字,并非所有值都包含文本。

1 个答案:

答案 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

通常,如果您尝试将字符串的开头的数字解释为数字,那么您可能希望将值放在不同的列中。换句话说,您也可以考虑修复数据模型。