SQL排序问题,字段中含有字母、数字、汉字,如何只按数字排序

ktyu10 2013-11-01 10:14:12
RT
补充:汉字、数字、字母是无序组合的,大部分数据的格式如:abc-ef123-汉字或者abc-ef123
也有可能是abc-de-fsd123-45,数字、字母汉字的长度皆不定
如果有汉字,汉字肯定是在最后面

如果数据中只有数字和字母的,就直接用数字排序
如果数据中出现了数字之间是隔开的,那就不可能出现汉字,这种情况要求取前面的数字排序

如果有汉字的,数字部分就肯定是连在一起的,这种情况要求直接用数字排序,求助啊。。。
...全文
602 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-11-01
  • 打赏
  • 举报
回复
是这样吗:


;with t
as
(
select 'abc-ef124-汉字' as v union all
select 'abc-ef231' union all
select 'abc-de-fsd023-45'
)

select v,order_str
from
(
select *,
       case when v like '%[吖-座]%'
                 then substring(v,patindex('%[0-9]%',v),
                                patindex('%[吖-座]%',v) - patindex('%[0-9]%',v)-1)
            when v like '%[0-9]%-%[0-9]%' 
                 then substring(v,patindex('%[0-9]%',v),
                                len(v)-charindex('-',reverse(v))-
                                patindex('%[0-9]%',v)+1)
            when v like '%[0-9]%'
                 then right(v,len(v)-patindex('%[0-9]%',v)+1)
       end as order_str                               
from t
)tt
order by order_str
/*
v	                order_str
abc-de-fsd023-45	023
abc-ef124-汉字	    124
abc-ef231	        231
*/
zbdzjx 2013-11-01
  • 打赏
  • 举报
回复
写个函数,将非数字的都过滤掉,再按结果进行排序。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧