ITPub博客

首页 > 数据库 > Oracle > 使用正则表达式对数字字符串字段排序

使用正则表达式对数字字符串字段排序

原创 Oracle 作者:llnnmc 时间:2019-02-19 17:11:36 0 删除 编辑

我们在给含有数字的字符串字段进行排序时,常常会遇到一个尴尬的情况,用简单的order by无法给这些字段完整的排序,如以下查询效果,不符合我们的预期:

select * from tb1 order by name;

怎么办呢?用正则表达式可以解决这个问题,下面给个完整例子:

创建测试表

create table tb1(name varchar2(50), val number);

insert into tb1 values('rec7', 100);

insert into tb1 values('rec8', 100);

insert into tb1 values('rec3', 100);

insert into tb1 values('rec5', 100);

insert into tb1 values('rec2', 100);

insert into tb1 values('rec9', 100);

insert into tb1 values('rec10', 100);

insert into tb1 values('rec4', 100);

insert into tb1 values('', 100);

insert into tb1 values('rec6', 100);

insert into tb1 values('rec1', 100);

commit;

按照第一个字段排序输出

select * from tb1 order by to_number(regexp_substr(name, '[0-9]*[0-9]', 1))

也可以用以下形式,效果是一样的

select * from tb1 order by to_number(translate(name, '0123456789.' || name, '0123456789.')) asc nulls last

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2636391/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-12-29

  • 博文量
    101
  • 访问量
    111618