Sql 如何从数据库列中分离记录,然后在Oracle中忽略第二个文本的查询中进行比较
我在oracle中有下表Sql 如何从数据库列中分离记录,然后在Oracle中忽略第二个文本的查询中进行比较,sql,oracle,Sql,Oracle,我在oracle中有下表 review ( review_id pk, review_name varchar2, review_viewers varchar2 ) review\u viewers列包含用户的user\u name和last\u name的组合,它将包含多条以冒号分隔的记录(:) 例如: (1,'Planning','John Smith:Max Payne:Maria Garcia'); 现在我想写一个查询,将上面的review\u v
review (
review_id pk,
review_name varchar2,
review_viewers varchar2
)
review\u viewers
列包含用户的user\u name
和last\u name
的组合,它将包含多条以冒号分隔的记录(:
)
例如:
(1,'Planning','John Smith:Max Payne:Maria Garcia');
现在我想写一个查询,将上面的review\u viewers
转换为单独的用户,如“John Smith”,“Max Payne”条带化“:“然后只使用该字符串中的user\u name
进行比较
例如,我只想比较值
“约翰”、“马克斯”和“玛丽亚”
因为它们是独一无二的
我的查询如下:
SELECT 1 FROM REVIEW WHERE review_viewers = [Input from user]
来自用户的输入将始终是单个字符串,例如“Max”或“John”等
我怎样才能做到呢?我尝试了好几次,但总是遇到死胡同。不要将多个值存储为分隔字符串。修复数据库设计,查询就会变得简单
variable userinput varchar2(20);
execute :userinput := 'Max';
select review_id, review_name, review_reviewers,
regexp_substr(review_reviewers, '(^|:)(' || :userinput || '\s.+?)(:|$)', 1, 1, null, 2)
from review
where regexp_like(review_reviewers, '(^|:)' || :userinput || '\s');