Sql 多值列上带条件的查询

Sql 多值列上带条件的查询,sql,oracle,Sql,Oracle,我正在Oracle Apex 4.2中构建报告。生成报表的表在其中一列中有多个值 ----------------------------------- | ID | NAME | PROJECT_ID | ----------------------------------- | 1 | P1 | 23:45:56 | | 2 | P2 | 23 | | 3 | P3 | 45:65

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

-----------------------------------
| ID   |  NAME   |  PROJECT_ID    |
-----------------------------------
|  1   |   P1    | 23:45:56       |
|  2   |   P2    |    23          |
|  3   |   P3    |    45:65       |
-----------------------------------
我想构建一个查询,根据项目id检索名称

 Select name from table where project_id = 23;
这显然将只返回P2,但是我想构建一个查询,如果搜索23,它将返回P1和P2


非常感谢您的帮助。

您可以使用LIKE代替=:

Select name from table where project_id LIKE '%23%';
如果您的示例中有一个公共分隔符,如“:”,则可以使用以下命令排除像“123”这样的结果:

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

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

您可以使用LIKE代替=:

Select name from table where project_id LIKE '%23%';
如果您的示例中有一个公共分隔符,如“:”,则可以使用以下命令排除像“123”这样的结果:

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

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

这是Apex中的常见设计,因为它内置了对冒号分隔字符串的支持(例如,驱动换向控制装置和其他项目类型)

我通常使用这种模式:

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

另外,这个列名很遗憾——我会把它叫做
PROJECT\u ID\u LIST

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

我通常使用这种模式:

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

另外,这个列名很遗憾——我会把它叫做
PROJECT\u ID\u LIST

我真的很抱歉,但我不明白为什么人们会投票给这个答案。这个查询会返回PROJECT\u ID的名称,比如:23123、230、231等等……根据样本数据,不清楚您的数据是否有“123”我们试图避免。这23个总是用“:”分隔吗?是的,数据范围在1到50000之间。总是用冒号分隔。如果只有一个实例,就没有冒号。在第一个签名之前和最后一个签名之后都没有冒号。我真的很抱歉,但我不明白为什么人们会投票给这个答案。这个查询将返回项目的名称_ID如:23123、230、231等等…根据示例数据,不清楚您的数据中是否有您试图避免的“123”。23是否总是用“:”分隔?是的,数据范围在1-50000之间。总是用冒号分隔。如果有单个实例,则没有冒号。在第一个符号之前和最后一个符号之后没有冒号。谢谢Jeff雷伊,航天飞机有时真的很痛苦。关于列命名约定,我同意你的观点,它应该以不同的方式命名,但这只是一个例子……谢谢杰弗里,航天飞机有时真的很痛苦。关于列命名约定,我同意你的观点,它应该以不同的方式命名,但这只是一个例子。。。