如何使用C#对SQL Server中的字母数字列进行排序?

时间:2019-04-20 16:20:56

标签: c# sql-server

我有一些像这样存储在SQL Server中的数据:

A1
A2
A3
1A
2A
3A

如何排序?

我尝试了以下查询:

select name
from Analyze_Table
group by name
order by CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name

但这仅按第一个数字和字母排序,不对按字母和数字值排序

2 个答案:

答案 0 :(得分:1)

我试图仅根据名称的数字部分进行排序,但不包括第一个或最后一个字符。然后,如果有2个相同的数字,它们将再次排序,例如23和23A。这应该给您您想要的输出

select name
from Analyze_Table
group by name
order by case 
  when isnumeric(name) = 1 then cast(name as int)
  when isnumeric(left(name, 1)) = 0 and isnumeric(right(name, 1)) = 0 then cast(substring(name, 2, len(name)-2) as int)
  when isnumeric(left(name, 1)) = 0 then cast(right(name, len(name)-1) as int)
  when isnumeric(right(name, 1)) = 0 then cast(left(name, len(name)-1) as int) end
  ,name

答案 1 :(得分:0)

如果您想首先使用以数字开头的名称,那么这就是您什么?

order by (case when name like '[0-9]%' then 1 else 2 end),
         name