2017-09-29 2 views
0
Select 'Total schools' As Title, Count(1) As Total_Count 
From (Select Distinct School_Name, Indv_Id 
     From D_Education D 
     where Regexp_Like(School_Name,'[^A-Za-z0-9, -./]+') 
    ); 

このクエリは約100の異なる学校名を返します。チェックが入っていなくても空白レコードが取得されますか?

これによって返されるレコードのほとんどに、?、\、空白などの特殊文字があります。私の質問は、空白を除外するチェックをしているにもかかわらず、なぜホワイトスペースレコードが回収されているのかです。 Dorcas Place - そのような記録が来ています。

すべてのヘルプ高く評価され:)

答えて

4

をこの式:

​​

は単純ではない、あなたのリストの中少なくとも一つの文字がが名前であることを要求されています。あなたは特殊文字を持つ名前にしたい場合は

、これはあなたが何をしたいことがあります

where not Regexp_Like(School_Name, '^[A-Za-z0-9, -./]$') 

これは名前ですべて文字が有効であることを確認しています。 ^$は、正規表現のアンカーです。文字列全体がパターンと一致する必要があります。

編集:

単一引用符を許可するには、あなたがどうなる:

where not Regexp_Like(School_Name, '^[A-Za-z0-9, -./'']$') 

それは文字列の区切り文字であるため、あなたは、単一引用符を二重にする必要があります。

+0

完璧な@ゴードン!それは多くの助けとなりました。ありがとう!あなたは上記の表現の違いを詳しく教えていただけますか? –

+0

ここでもう少し簡単な質問がありますが、どのように '^ [A-Za-z0-9、-./]$]を追加して、O'Brienのような名前をリストに入れてはいけません。私が単に[間]に置いていると、それは私に誤りを示しています。 –

+1

@Pushpendra、Oracleで単一引用符 ''をエスケープするには、単純に'' ''を二重にします。しかし、 '$'の前に '+'や '*'が必要な場合や、正規表現が1つの文字と一致する場合があります。 –

関連する問題