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