2012-04-26 58 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和表3的結果。當它只是像TESTING這樣的字符串的一部分時,我不想要匹配。

我似乎無法得到我需要的東西。

+2

哈,你是那種將逗號放在下一行項目之前的特殊物種。 – 2012-04-26 15:38:02

+2

你也是這些物種之一嗎?哈哈,我從一位20年DBA老將的朋友那裏汲取了這種習慣。我這樣做似乎更好。此外,您可以更容易地註釋該屬性,如果您想註釋掉最後一個屬性,則不必在前一行註釋掉逗號。 – northpole 2012-04-26 15:39:17

+0

好點。我從今天開始實施。 – rvphx 2012-04-26 15:44:02

回答

8

您可以使用正則表達式來查找你想:

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

這會給你有ING之前通過線或1個或多個下劃線的任一開局,隨後行的末尾或1個或多個下劃線列。

+0

這就是它!感謝您的幫助,本網站永遠不會讓我失望。 – northpole 2012-04-26 16:21:44

+0

+1不錯,這並不需要很長的時間才能真正瞭解正則表達式的人,儘管我很好奇[爲什麼不只是(^ |(_)+)ING](http://sqlfiddle.com/#!4/4c95a/29) – 2012-04-26 16:37:13

+0

@ConradFrix我不知道我是否會說我「知道」正則表達式,但給予足夠的時間,精力和運氣,我可以一起破解一些東西(在你的答案發布之前開始)。 – 2012-04-26 16:42:51

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