1

特定の単語に一致する属性を持つ、Oracle データベース内のすべてのテーブルを検索する必要があります。たとえば、私は使用しています:

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 のように文字列の一部にすぎない場合は、一致させたくありません。

必要なものを正確に取得できないようです。

4

2 に答える 2

8

正規表現を使用して、必要なものを見つけることができます。

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

これにより、ING の前に行頭または 1 つ以上のアンダースコアがあり、その後に行末または 1 つ以上のアンダースコアが続く列が得られます。

于 2012-04-26T16:18:11.107 に答える
1

REGEXP_LIKE を使用できます。私は正規表現があまり得意ではありません。単語の開始または _ を 1 つの式で行う方法を理解できる人が私よりも優れています。

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

デモ

于 2012-04-26T16:15:36.900 に答える