2016-08-26 6 views
0

SQLクエリから返される既存のフィールドを確認できるようにする必要があります。指定された形式です。定義された4つの形式のいずれにもないフィールドを返します。oracle sqlのフィールドの形式を確認する方法

これを行う簡単な方法はありますか?

私は現在、コードを持っていません。どこから始めるべきか分かりません。

確認する必要がある形式を以下に示します。

(1) AB0161298 [ ie 9 chars] 
(2) AB0161298002 [ie 12 chars] 
(3) ABC - AB0161298 [ie 15 chars] 
(4) ABC - AB0161298002 [ie 18 chars] 

希望するか、アドバイスをお願いします。

感謝

+1

あなたはここで働くこと – pablomatico

+0

REGEXP_LIKEのための正規表現を使用することができます。https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm – vercelli

+1

を道に沿ってあなたを開始するには:あなたが必要な場合あなたのモデルに適合しない値を表示するには、 'field_name、regexp_like(field_name、)ではなく、field_nameを選択します。マッチパターンは文字列です( ''...' 'で囲みます)。それはフィールド全体と一致しなければならないので、文字列の先頭と末尾の両方にアンカーするには、 '^'で始まり、 '$'で終わる必要があります。それ以外の場合は構造体 '(.... | .... | .... ....)'があり、 '....'は4つの「良い」パターンです。 '' ^(.... | .... | .... | ....)$ ''さらに助けが必要な場合には、返信してください。 – mathguy

答えて

0

を試し、うまく働きました。あなたのすべての協力に感謝します。

select * from table where field NOT IN 
(select field from table 
where regexp_like(field,'^[A-Z][A-Z0-9][A-Z0-9] [-] [A-Z0-9]{9}$') 
OR regexp_like(field,'^[A-Z][A-Z0-9][A-Z0-9] [-] [A-Z0-9]{12}$') OR 
regexp_like(field,'^[A-Z0-9]{9}$') OR regexp_like(field,'^ 
[[A-Z0-9]{12}$')); 

私が今持っている唯一の問題は、それが(唯一の1または2の追加の形式を意味し、同じフォーマットのほとんどを)異なるフィールドの数千人が戻ってきたですが、とにかくのみの異なる形式の表示がありますか?数千人ではなく数人のリストを取得するには?

-1

は---私は存在しないはずの形式を返すために、以下の使用この1

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'table_name' 
ORDER BY ordinal_position 
+0

列があるかどうかをチェックするのではなく、列の* in *の値が特定のパターンに準拠しているかどうかを確認します。 Plus:Oracleには 'information_schema'はありません –

関連する問題