sql - 如何将列中的逗号分隔值与 Oracle 中的字符串集合进行比较

标签 sql oracle stored-procedures oracle10g

我在数据库中有一个列“名称”,其值为“约翰,史密斯”。我将字符串变量“name_respository”传递给存储过程,该过程的值为“test,test1,john,test2”或“temp,smith,temp1,temp2”。字符串变量 'name_repository' 值是在运行时生成的,它们可能是 temp 或 test。

现在这就是我想要做的,我正在尝试选择 name 在 name_repository 中的行。问题是我的名字是 'john,smith' 而 name_repository 只有其中之一。我需要拆分 name 变量 john 和 smith,然后与集合进行比较并返回行。

+----------+----------+
| ID     | Name     |
+----------+----------+
| 1      | john,smith  |
| 2      | james,stone    |
| 3      | john,smith |

现在我传递的变量可能有 smith 或 john 或 james 或 Stone 和其他垃圾值。
如果我将 smith 或 john 作为参数,则应该返回第 1 行和第 3 行。

查询应该是这样的
Select * from table where name in name_repository

最佳答案

您可以像这样拆分名称:

SELECT REGEXP_SUBSTR ( name, '[^,]+', 1, LEVEL) data 
FROM table 
CONNECT BY LEVEL <= LENGTH(name) - LENGTH(REPLACE(txt, ',')) + 1

关于sql - 如何将列中的逗号分隔值与 Oracle 中的字符串集合进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901408/

相关文章:

sql - 如何使用 group by 检索不同的数据

oracle - 如何在 PL SQL 中为现有表创建唯一 id?

c# - 如何在 SQL 中更改值

SQL顺序交替

php - SQL查询只打印第一行

sql - Oracle Merge 语句中的 Column ambiguously defined 错误

sql-server - 如何在Delphi代码中获取存储过程的SQL内容?

mysql - 在 ubuntu 终端中创建存储过程

sql - Bigquery SQL - 在 SELECT 或 JOIN 中取消嵌套更好吗?

mysql - 将带有 FOREIGN KEY 的表添加到 MySQL 数据库会导致 errno 150