大家好我有一个像下面这样的where子句
select * from table1
where colum1 IN (?parameter)
当我将值传递给参数时,它们会显示如下
('1,2,3')
但要执行查询,我需要将值更改为('1','2','3')
有没有办法直接用IN子句中的单引号逗号替换逗号?
答案 0 :(得分:1)
有一个黑客可以使用like
执行您想要的操作:
select *
from table1
where ',' || column1 || ',' like '%,' || (?parameter) || ',%';
此功能,但不会在column1
上使用索引。您应该考虑其他解决方案,例如:
in
。也可能有其他特定于Oracle的解决方案。
答案 1 :(得分:0)
使用MS SQL,您可以将其转换为表值并使用join作为您的条件,我不熟悉oracle但您可以找到相同的方法来执行此操作。
for (int i = 0; i < me.getMail().size(); i++) {
messageBox.add(new Label(me.getMail().get(i).toString()), 0, rowNum);
rowNum++;
messageBox.getRowConstraints().add(new RowConstraints(...));
}
答案 2 :(得分:0)
您可以使用with子句来实现它。这里的逻辑是将每个逗号分隔值转换为不同的行。
with temp_tab as (
select replace(regexp_substr(parameter, '[^,]+',1, level),'''','') as str
from dual
connect by level<= length(regexp_replace(parameter, '[^,]+'))+1 )
select * from table1 where column1 in (select str from temp_tab);