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



大家好,我有一个如下所示的where子句

select * from table1 
where colum1 IN (?parameter)

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

有一个技巧可以做你想做的事,使用 like

select *
from table1 
where ',' || column1 || ',' like '%,' || (?parameter) || ',%';

此功能,但它不会在 column1 上使用索引。 您应该考虑其他解决方案,例如:

  • 将字符串解析为表变量。
  • 使用具有固定参数数的in
  • 将值存储在表中。

可能还有其他特定于 Oracle 的解决方案。

使用 MS SQL,您可以将其转换为表值并使用 join 来满足您的条件,我不熟悉 oracle,但您可以找到相同的方法。

DECLARE @IDs varchar(max) ='1,2,3';
;WITH Cte AS 
( 
    SELECT
        CAST('<ID>' + REPLACE( @IDs,  ',' , '</ID><ID>') + '</ID>' AS XML) AS IDs 
)
SELECT '''' + Split.a.value('.', 'VARCHAR(100)') +'''' AS ID FROM Cte
    CROSS APPLY Cte.IDs.nodes('/ID') Split(a)
您可以使用

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

相关内容

  • 没有找到相关文章

最新更新