5

これは本当に痛くなり始めています!

正規表現条件を使用して Oracle 開発者でクエリを作成しようとしています

私の目的は、一般的に名前に含まれていない文字 (非アルファ、スペース、ハイフン、一重引用符) を含むすべての姓を見つけることです。

つまり、見つける必要があります

J00ls
McDonald "Macca"
Smithy (Smith)

そして見つけられない

Smith
Mckenzie-Smith
El Hassan
O'Dowd

私の現在のクエリは

select * from dm_name 
WHERE regexp_like(last_name, '([^A-Za-z -])')
and batch_id = 'ATEST';

これにより、一重引用符以外のすべてが除外されます。一重引用符を入れる場合、Oracvel SQL Develoepr パーサーはそれをリテラルとして受け取ります。

私はもう試した:

\' -- but got a "missing right parenthesis" error
||chr(39)|| -- but the search returned nothing
'' -- negated the previous character in the matching group e.g. '([^A-Za-z -''])' made names with '-' return.

提供できるものは何でもいただければ幸いです。

4

2 に答える 2

5

引用符をエスケープするには、単一引用符を 2 重にするだけです。

そう

select *
  from dm_name
 where regexp_like(last_name, '[^A-Za-z ''-]')
   and batch_id = 'ATEST'

このsqlfiddleも参照してください。注、SQL開発者で同様のクエリを試してみましたが、それはフィドルと同様に機能しました。

また、これが機能するには、文字がグループの最後の文字である必要があることに注意してください。そうでない場合、文字ではなくグループを-見つけようとします。SPACE'-

于 2013-10-21T00:08:32.437 に答える
4

以下の作品:

select * 
  from dm_name 
  WHERE regexp_like(last_name, '([^A-Za-z ''-])');

この SQLFiddle を参照してください

SQL Developerがそれを気に入るかどうかは、その製品をインストールしていないため、私には証明できません。

共有してお楽しみください。

于 2013-10-20T23:59:59.063 に答える