如何在SQLIN子句中用单引号逗号替换逗号

时间:2017-02-02 23:11:09

标签: sql oracle where-clause in-clause

大家好我有一个像下面这样的where子句

select * from table1 
where colum1 IN (?parameter)

当我将值传递给参数时,它们会显示如下 ('1,2,3')但要执行查询,我需要将值更改为('1','2','3') 有没有办法直接用IN子句中的单引号逗号替换逗号?

3 个答案:

答案 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);