0

我有一个名为的表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%'); 

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

4

2 回答 2

1

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

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

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

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

于 2014-09-25T11:17:33.360 回答
0

正如 Justin Cave 所强调的,您肯定违反了规范化。

此外,最佳实践是将它们存储在表的列中,而不是全部存储在一个表中。

我无法复制您的问题陈述。在此处查看证明

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
于 2014-09-25T11:21:05.943 回答