从Oracle数据库中的逗号分隔值中获取特定值

时间:2014-09-25 11:11:33

标签: sql jdbc oracle10g select-query

我有一个名为DUMMY_TAB的表,其中有一列COLOR,其中包含逗号分隔值RED,BLUE,WHITE,GREEN,YELLOW。现在我想检查是否存在多种颜色,并且我不知道存储值的顺序。

我使用了以下查询:

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

但查询没有返回任何内容。我能在这里得到任何帮助。

2 个答案:

答案 0 :(得分:1)

您应该使用联结表。 SQL具有用于存储列表的这种出色的数据结构。它被称为。逗号分隔值不是正确的方法。

但是,有时候,你别无选择。您正在寻找:

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

使用分隔符可确保您可以在列表的开头和结尾找到值。

答案 1 :(得分: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