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

发布者:上海IT外包来源:http://www.lanmon.net点击数:842

我们在给含稀有字的字符串字段停止排序时,经常会碰着一个为难的情形,用简单的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

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部