Oracle Query - 替换不起作用

时间:2014-05-10 23:29:05

标签: sql oracle oracle11g

我有一个查询,其中数据从前端进入IN状态。现在值以逗号分隔,例如:002,003或002q,4335f,123d,shd4或yuw98

我的查询的值为select * from tbl1 where userid in ('002,004'),其中应为userid in ('002','004')

我在下面尝试查询以替换字符串,但它不起作用。

从tbl1中选择* UserId in (''''|| Replace('004,002', ',', ''',''') || '''');

如果我在

中使用相同的值

Select (''''|| Replace('004,002', ',', ''',''') || '''') from dual;

返回
'004','002'

那为什么值不在我的原始查询中运行?

3 个答案:

答案 0 :(得分:0)

如果您有这样的查询:

 select * from tbl1 where userid in ('002,004')

并且,出于某种原因,你将值列表表示为字符串(假设你想在这种情况下搜索两个值),那么你可以使用like找到匹配:

where ','||userid||',' like ','||'002,004'||','

我鼓励您尝试通过正确构建查询来找到使in正常工作的方法。首先,这将允许查询利用索引。但是,如果不合理,那么like方法就可以了。

答案 1 :(得分:0)

之前我尝试过类似的事情,但很快就知道在甲骨文中这是不可能的。所以,我找到了另一个解决方案。希望它听起来不太傻。好的,这就是

  • 根据您对用户输入的值的最佳假设创建单独的变量。
  • 编写一个简单的pl / sql代码块来分隔每个值并将它们存储到变量中。
  • 在IN状态下使用所有这些变量。

答案 2 :(得分:0)

对于那些正在寻找解决方案的人,我找到了一个。

WHERE INSTRC('001, 002'), userid, 1, 1) > 0