【问题标题】:Get specific value from a comma separated values in Oracle database从 Oracle 数据库中的逗号分隔值中获取特定值
【发布时间】:2014-11-20 03:23:21
【问题描述】:

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

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

【问题讨论】:

  • 除了在列中存储逗号分隔列表是违反基本规范化的可怕做法这一事实之外,如果您的表包含您描述的数据,您发布的查询将返回该行。如果查询未返回行,则数据不得包含字符串 GREEN。当您搜索大写值时,表中的数据可能是小写的?
  • 我的行的大写逗号分隔值与我在我的问题中提出的相同。如绿色、蓝色、黄色
  • 如果数据和查询与您显示的完全相同,则查询将返回一行。向我们展示一个独立的示例,该示例复制了您可以在我们的机器上运行的问题。否则,几乎不可能调试问题可能是什么

标签: sql jdbc oracle10g select-query


【解决方案1】:

您肯定违反了 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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多