查询多值列的条件

时间:2013-06-18 15:30:39

标签: sql oracle

我正在Oracle Apex 4.2中构建报告。构建报告的表在其中一列中有多个值。

-----------------------------------
| ID   |  NAME   |  PROJECT_ID    |
-----------------------------------
|  1   |   P1    | 23:45:56       |
|  2   |   P2    |    23          |
|  3   |   P3    |    45:65       |
-----------------------------------

我想构建一个查询来检索基于project_id的名称。

 Select name from table where project_id = 23;

这显然只返回P2但是如果我们搜索23,我想构建一个返回P1和P2的查询。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

您可以使用LIKE而不是=:

Select name from table where project_id LIKE '%23%';

如果您的示例中有一个共同的分隔符,例如“:”,则可以使用以下内容排除“123”之类的结果:

SELECT name FROM table WHERE ':' || project_id || ':' LIKE '%:23:%'

通过将分隔符连接到字符串的前面和后面,您不必编写多个条件:LIKE '23:%'或LIKE'%:23:%'或LIKE'%:23'来处理列表中的第一个和最后一个数字。

答案 1 :(得分:1)

这是Apex中的常见设计,因为它内置支持冒号分隔的字符串(例如,用于驱动穿梭控件和其他项目类型)。

我通常使用这种模式:

Select name from table where INSTR(':'||project_id||':',':23:') > 0;

P.S。对于该列名称感到遗憾 - 我会称之为PROJECT_ID_LIST