繁体   English   中英

Oracle查询-替换不起作用

[英]Oracle Query - Replace not working

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

我的查询select * from tbl1 where userid in ('002,004')值作为select * from tbl1 where userid in ('002,004')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'

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

如果您有这样的查询:

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

并且,由于某种原因,您必须将值列表表示为字符串(假设在这种情况下要搜索两个值),则可以使用like查找匹配项:

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

我鼓励你试图找到一种方法,使in工作中,通过适当构建查询。 一方面,这将允许查询利用索引。 但是,如果不合理,那么like方法将起作用。

我以前尝试过类似的方法,但是很快就知道在Oracle中是不可能的。 因此,我制定了另一种解决方案。 希望它听起来不会太傻。 好了,它走了

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM