从字符串中搜索一组子字符串并显示所有记录

时间:2015-06-01 14:12:12

标签: sql plsql many-to-many plsqldeveloper

我正在使用Oracle 11g。

我将多个值存储在以分隔符(#@#)分隔的列中。我知道这是错误的数据库设计,但由于它使用了很多年,我不能做很多事情。 我需要执行搜索操作,其中我传递多个值,如果存储值中的任何一个值匹配,我应该获取所有记录。我阅读了有关此类场景的正则表达式。 有人可以指导我如何继续这个?提前谢谢。

由于

1 个答案:

答案 0 :(得分:0)

修改this

WITH tab AS (SELECT 'ab#@#bc#@#cd#@#de#@#ef' col FROM DUAL)
SELECT subcol
  FROM (    SELECT REGEXP_SUBSTR (col,
                                  '[^#@#]+',
                                  1,
                                  LEVEL)
                      subcol
              FROM tab
        CONNECT BY REGEXP_SUBSTR (col,
                                  '[^#@#]+',
                                  1,
                                  LEVEL)
                      IS NOT NULL)
 WHERE REGEXP_LIKE (subcol, 'c|d');

内部选择构建一个由#@#分隔的所有值的表。在您的应用中,您可以使用' |'来构建搜索字词列表。作为分隔符并传递它,例如。比如bind variable