使用正規表示式對數字字串欄位排序

llnnmc發表於2019-02-19

我們在給含有數字的字串欄位進行排序時,常常會遇到一個尷尬的情況,用簡單的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章