开发者社区> 问答> 正文

在SQL Server中对包含数字的VARCHAR列进行排序?

我有一列,其中数据包含带数字的字母。

例如:

1 name
2 names .... 
100 names

排序这些数据时,排序不正确,如何解决?我提出了一个请求,但排序不正确。

select name_subagent
from Subagent
order by 
    case IsNumeric(name_subagent) 
        when 1 then Replicate('0', 100 - Len(name_subagent)) + name_subagent
        else name_subagent
end

展开
收起
心有灵_夕 2019-12-06 23:10:21 774 0
1 条回答
写回答
取消 提交回答
  • 该表达式将查找带字符串的字母的第一个匹配项,并假定该位置之前的任何数字都是数字。您显然需要根据您的需求调整此语句,因为您的数据显然不是拉丁字符。通过一些调整,您应该能够准确实现所需的功能:

    select 
        name_subagent
    from 
        Subagent
    order by 
        CAST(SUBSTRING(name_subagent,0,PATINDEX('%[A-Z]%',name_subagent)) as numeric)
    
    

    注意,'%[A-Z]%'表达式。这只会寻找字符串中字母的首次出现。 我没有考虑诸如' !之类的特殊字符。',' # '等。这是您可能需要尝试并适应您的需求的地方。

    2019-12-06 23:11:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载