2014-09-25 75 views
0

我有一個名爲DUMMY_TAB的表,其列COLOR包含逗號分隔值RED,BLUE,WHITE,GREEN,YELLOW。現在我想檢查是否存在多種顏色,並且我不知道存儲值的順序。從Oracle數據庫中的逗號分隔值獲取特定值

我已經使用查詢關鍵詞,比如:

SELECT COLOR from DUMMY_TAB WHERE (COLOR LIKE '%GREEN%' OR COLOR LIKE '%VOILET%' OR COLOR LIKE '%ORANGE%'); 

但查詢不返回任何東西。我可以在這裏得到任何幫助嗎?

+2

除了一個事實,即存儲在列中的逗號分隔的列表是可怕的做法違反基本正常化,如果表中的數據爲你描述,查詢您發佈將返回該行。如果查詢未返回行,則數據不得包含字符串「GREEN」。當您搜索大寫字母值時,表格中的數據可能是小寫字母嗎? – 2014-09-25 11:17:41

+0

我的行有大寫逗號分隔值,與我在問題中詢問的相同。像GREEN,BLUE,YELLOW – Imran 2014-09-25 11:21:32

+0

如果數據和查詢完全按照您顯示的那樣進行,則查詢將返回一行。向我們展示一個獨立的示例,複製我們可以在我們的機器上運行的問題。否則,幾乎不可能調試出什麼問題 – 2014-09-25 11:26:27

回答

1

您應該使用聯結表。 SQL有這個偉大的數據結構來存儲列表。它被稱爲。逗號分隔值不是正確的方法。

但是,有時候,你別無選擇。您正在查找:

where ',' || 'GREEN' || ',' like ',' || COLOR || ',' 

使用分隔符可確保您可以在列表的開頭和末尾找到值。

0

你肯定違反正常化,正如Justin Cave所強調的那樣。

此外,最佳做法是將它們存儲在表格的列中,而不是全部存儲在一個表格中。

我無法複製您的問題陳述。見證據here

create table temp (col varchar2(30)); 

insert into temp values('RED,BLUE,WHITE,GREEN,YELLOW'); 

SELECT * from temp WHERE col LIKE '%GREEN%'; 

COL 
RED,BLUE,WHITE,GREEN,YELLOW