我们可以在查询中比较LHS = RHS

时间:2015-01-08 13:28:50

标签: database oracle csv comparison

我有一个查询,我将用户名输入为单个字符串:

 'MONTY,JONTY'

我的查询部分如下:

SELECT *
  FROM tbl_dummy
 WHERE username IN (SELECT regexp_substr(:username, '[^,]+', 1, level)
                      FROM dual
                   CONNECT BY regexp_substr(:username, '[^,]+', 1, level) IS NOT NULL);

此处我的专栏'Username'将包含以下数据:

Monty, Jonty
Monty
Jonty
Jonty, Monty

所以当我传递我的字符串时,它会分开,'Monty', 'Jonty'和。{ 查询比较将错过4行中的两个值"Monty, Jonty""Jonty, Monty"

如果我能够在比较时分割我的柱值,那么我可以证明LHS = RHS。

所以它会是('JONTY','MONTY') = ('MONTY','JONTY')

这种功能有什么办法可以实现吗?我无法编写存储过程,所以它必须是一个oracle查询。

此外,有没有人使用RegExp_Like这样的事情?我无法找到适合此代码的语法。

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,并且您的逗号分隔值不是太长(Oracle中的正则表达式限制为512字节IIRC),则可以用管道替换逗号分隔的列表({{1} }) - 分隔列表并使用`REGEXP_LIKE()',如下所示:

|

答案 1 :(得分:0)

只需使用LIKE运算符。

where column_name like '℅MONTY℅' or column_name like '℅JONTY℅'

您正在尝试在谓词中使用varying-IN列表。在您的情况下,'MONTY, JONTY'是一个string