【问题标题】:Oracle Query - Replace not workingOracle 查询 - 替换不起作用
【发布时间】:2014-05-10 23:29:04
【问题描述】:

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

我的查询取值为select * from tbl1 where userid in ('002,004'),而它应该是userid in ('002','004')

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

Select * from tbl1 where UserId in (''''|| Replace('004,002', ',', ''',''') || '''');

如果我在中使用相同的值

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

退货
'004','002'

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

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    如果您有这样的查询:

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

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

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

    我鼓励您尝试通过正确构造查询来找到使in 工作的方法。一方面,这将允许查询利用索引。但是,如果不合理,那么like 方法将起作用。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2020-06-15
          • 2017-02-23
          • 2012-10-20
          • 2018-08-03
          • 2016-06-04
          • 2017-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多