Oracle 10 g新機能-正規表現
クエリーを行う場合、文字列を特定のルールで検索する必要がある場合があります.たとえば、3番目が5-8で、最後の4番目が「8888」のすべての電話をクエリーする必要がある場合があります.9 iの前に、複雑な条件を書く必要があります.
Javaプログラマーが正規表現を使って簡単にできるのがうらやましくなります.10 gでは、これ以上複雑にする必要はありません.oracleもいくつかの正規表現関数を提供し、開発者:REGEXP_を大幅に便利にしました.LIKE、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTRは、文字列のボケマッチング、置換、挿入、切り取りにそれぞれ使用される.正規表現のルールについては詳しく説明しませんが、関連資料を調べて入手できます.簡単な例を挙げる.上記の例を例にとると、クエリ文は次のように書くことができます.
付規則:^'は入力文字列の開始位置に一致し、角カッコ式で使用されます.この場合、文字セットが受け入れられないことを示します.'$'は、入力文字列の最後の位置に一致します.RegExpオブジェクトのMultilineプロパティが設定されている場合、$も'n'または'r'に一致します. '.' 改行記号n以外の任意の単一文字を一致させる. '?' 前のサブエクスプレッションを0回または1回一致させます.'+'は、前のサブ式に1回または複数回一致します.'*'は、前のサブエクスプレッションに0回または複数回一致します.'|'は、2つの項目の間の1つの選択を示します.例'^([a-z]+|[0-9]+)$'は、すべての小文字または数字を組み合わせた文字列を表す.'()'は、サブエクスプレッションの開始位置と終了位置をマークします.'[]'は中括弧式をマークします.'{m,n}'は正確に出現回数範囲であり、m=<出現回数<=n,'{m}'は出現m回を表し、'{m,}'は少なくともm回を表す.numはnumに一致し、numは正の整数である.取得した一致に対する参照.文字クラスタ:[:alpha:]]任意のアルファベット.[:digit:]]任意の数値.[::alnum:]]任意のアルファベットと数字.[:space:]]任意の白い文字.[::upper:]]任意の大文字.[:lower:]]任意の小文字.[::punct:]]任意の句読点.[[::xdigit:]]任意の16進数は、[0-9 a-fA-F]に相当する.各オペレータの演算優先度エスケープ(),(?:),(?=),[]カッコと角カッコ*,+,,?{n},{n,},{n,m}限定子^,$,anymetacharacter位置と順序|"または"操作
<!---->
Select
username
from
t_userinfo
where
(phonenumber
like
‘
135
%
8888
’
or
phonenumber
like
‘
136
%
8888
’
or
phonenumber
like
‘
137
%
8888
’
or
phonenumber
like
‘
138
%
8888
’)
and
length(phonenumber)
=
13
;
Javaプログラマーが正規表現を使って簡単にできるのがうらやましくなります.10 gでは、これ以上複雑にする必要はありません.oracleもいくつかの正規表現関数を提供し、開発者:REGEXP_を大幅に便利にしました.LIKE、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTRは、文字列のボケマッチング、置換、挿入、切り取りにそれぞれ使用される.正規表現のルールについては詳しく説明しませんが、関連資料を調べて入手できます.簡単な例を挙げる.上記の例を例にとると、クエリ文は次のように書くことができます.
<!---->
create
table
t_userinfo (username
varchar2
(
10
), phonenumber
varchar2
(
13
));
insert
into
t_userinfo
values
(
'
zhansan
'
,
'
13012323434
'
);
insert
into
t_userinfo
values
(
'
lisi
'
,
'
13512348888
'
);
insert
into
t_userinfo
values
(
'
wangwu
'
,
'
13912328888
'
);
insert
into
t_userinfo
values
(
'
zhaoliu
'
,
'
13743218888
'
);
insert
into
t_userinfo
values
(
'
sunqi
'
,
'
1361234888
'
);
commit
;
SQL
>
Select
username, phonenumber
from
t_userinfo
where
REGEXP_LIKE(phonenumber,
'
13[5-8][0-9][0-9][0-9][0-9]8{4}
'
); USERNAME PHONENUMBER
--
-------- -------------
lisi
13512348888
zhaoliu
13743218888
===========
, , oracle 10g , , substr 。
10g , , 。
:
SQL> select t.gdzt,regexp_substr(gdzt,'//CELL--[^,)]+'),regexp_substr(gdzt,'CELL [[:digit:]-)]+') from jcss_gd t; GDZT REGEXP_SUBSTR(GDZT,'//CELL--[^ REGEXP_SUBSTR(GDZT,'CELL[[:DIG -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 460-00-28951-21003//CELL Disconnected//CELL--(JZ-BSS19:SITE-11:chan //CELL--(JZ-BSS19:SITE-11:changtuchezhan CELL 460-00-28951-21003 460-00-29020-24943//CELL Disconnected//CELL--(JZ-BSS20:SITE-55:yaog //CELL--(JZ-BSS20:SITE-55:yaoguai CELL 460-00-29020-24943 460-00-29020-24913//CELL Disconnected//CELL--(JZ-BSS20:SITE-52:sanx //CELL--(JZ-BSS20:SITE-52:sanxinggong CELL 460-00-29020-24913 //460-00-29011-25393//CELL Disconnected//CELL--(JZ-BSS33:SITE-39:xuet //CELL--(JZ-BSS33:SITE-39:xuetan CELL 460-00-29011-25393付規則:^'は入力文字列の開始位置に一致し、角カッコ式で使用されます.この場合、文字セットが受け入れられないことを示します.'$'は、入力文字列の最後の位置に一致します.RegExpオブジェクトのMultilineプロパティが設定されている場合、$も'n'または'r'に一致します. '.' 改行記号n以外の任意の単一文字を一致させる. '?' 前のサブエクスプレッションを0回または1回一致させます.'+'は、前のサブ式に1回または複数回一致します.'*'は、前のサブエクスプレッションに0回または複数回一致します.'|'は、2つの項目の間の1つの選択を示します.例'^([a-z]+|[0-9]+)$'は、すべての小文字または数字を組み合わせた文字列を表す.'()'は、サブエクスプレッションの開始位置と終了位置をマークします.'[]'は中括弧式をマークします.'{m,n}'は正確に出現回数範囲であり、m=<出現回数<=n,'{m}'は出現m回を表し、'{m,}'は少なくともm回を表す.numはnumに一致し、numは正の整数である.取得した一致に対する参照.文字クラスタ:[:alpha:]]任意のアルファベット.[:digit:]]任意の数値.[::alnum:]]任意のアルファベットと数字.[:space:]]任意の白い文字.[::upper:]]任意の大文字.[:lower:]]任意の小文字.[::punct:]]任意の句読点.[[::xdigit:]]任意の16進数は、[0-9 a-fA-F]に相当する.各オペレータの演算優先度エスケープ(),(?:),(?=),[]カッコと角カッコ*,+,,?{n},{n,},{n,m}限定子^,$,anymetacharacter位置と順序|"または"操作