我有一个查询,我将用户名输入为单个字符串:
'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这样的事情?我无法找到适合此代码的语法。
答案 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
。