Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从数据库列中分离记录,然后在Oracle中忽略第二个文本的查询中进行比较_Sql_Oracle - Fatal编程技术网

Sql 如何从数据库列中分离记录,然后在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

我在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 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');