发布者:上海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
分享到: