2009-07-22 8 views
1

Oracleでは、単一の正規表現を使用して特定の文字列形式と空の文字列の両方を一致させることは可能ですか?正規表現の「NULL」の部分は文字クラスではなく、文字列リテラルとして扱われNULLと一致するOracle正規表現を作成できますか?

SELECT 1 
    FROM DUAL 
WHERE REGEXP_LIKE('12345', '^([1-5]{5})|NULL$'); 

SELECT 1 
    FROM DUAL 
WHERE REGEXP_LIKE('', '^([1-5]{5})|NULL$'); 

SELECT 1 
    FROM DUAL 
WHERE REGEXP_LIKE(NULL, '^([1-5]{5})|NULL$'); 

と3つのすべてのクエリが返す1

私は」:の線に沿って

何かいくつかのデータ検証ルーチンを記述し、各データ要素に対してこれらの検証規則を別々に指定するのではなく、入力文字列が空であるかどうか、フォーマットを判別する正規表現を1つだけ格納/使用したいとします。

おかげで、 ジェフ

答えて

6

私はあなたがそうで直接行うことができるとは思わないが、あなたはnull値を作るためにnvlを使用することができ、空白文字列として表示されたり文字列 'NULL'

SELECT 1 
    FROM DUAL 
WHERE REGEXP_LIKE(NVL(value, 'NULL'), '^([1-5]{5})|NULL$'); 
+0

それは良い解決策です。ありがとう! – jlpp

5

一つのオプション:使用

where rexp_like(expr, ''') or (expr is null) 
+0

+1、構文が修正されていたら、このソリューションは...どんな魔法の値に依存しない... REGEXP_LIKE(式expr、「^([1-5] {5})$) –

+0

私の構文訂正で構文エラーが発生しました... :( –

+0

コードベンダーは、その条件を満たすソリューションを提供しています。 – jlpp

関連する問題