2012-04-26 15 views
1

Oracleデータベース内の特定の単語に一致する属性を持つすべてのテーブルを見つける必要があります。例えば、私が使用していますので:SQL文字列内の特定の値の検索

SELECT TABLE_NAME 
    , COLUMN_NAME 
    FROM USER_TAB_COLUMNS 
WHERE UPPER(COLUMN_NAME) LIKE '%ING%' 

これが返されます。

TABLE1 ING 
TABLE2 THIS_ING 
TABLE3 ING_FIRST 
TABLE5 TESTING 

は、私が唯一TABLE1、TABLE2とTABLE3からの結果を返すようにしたいです。私はそれがTESTINGのような文字列の一部であるときにはマッチを望んでいません。

私が必要とするものを正確に得ることができないようです。

+2

ああ、次の行の項目の前にコンマを置く特異な種です。 –

+2

あなたもこれらの種の1つですか?ハハ、私は20年のDBAのベテランである友人からその習慣を拾いました。私がそれをするとき、それは一直線に並んでいるようです。さらに、属性を簡単にコメントアウトすることもできます。最後の属性をコメントアウトする場合は、前の行のカンマをコメントアウトする必要もありません。 – northpole

+0

良い点。私は今日からこれを実装しています。 – rvphx

答えて

8

あなたは何を見つけるために正規表現を使用することができますあなたが欲しい:

SELECT TABLE_NAME 
    , COLUMN_NAME 
    FROM USER_TAB_COLUMNS 
WHERE regexp_like (column_name, '(^|(_)+)ING((_)+|$)') 

これはあなたのINGは、行または1つの鉱石以上のアンダースコアのいずれかの開始に先行し、行の最後または1つの鉱石以上のアンダースコアが続いていた列が得られます。

+0

これはそれです!助けてくれてありがとう、このサイトは決して私を失敗させない。 – northpole

+0

+1本当に正規表現を知っていた人のために長い時間がかかりませんでしたが、私は好奇心が強いですが[なぜ(^ |(_)+)ING](http://sqlfiddle.com/#!4/4c95a/29) –

+0

@ConradFrix私は正規表現を "知っている"と言っているかどうかはわかりませんが、十分な時間、努力、運があれば、一緒に何かをハックすることができます。 –

1

REGEXP_LIKEを使用できます。私は正規表現でひどく苦手、私よりも誰かが一つの式で単語のいずれかの開始を行う方法を見つけ出すか_でき

SELECT TABLE_NAME 
,  COLUMN_NAME 
FROM USER_TAB_COLUMNS 
WHERE 
REGEXP_LIKE(COLUMN_NAME,'[_]ING') 
or 
REGEXP_LIKE(COLUMN_NAME,'^ING') 

DEMO

関連する問題