a,b,c是否全部存在于一列中的sql

临摹 2012-03-16 03:56:47
表table1
用户 物品
张三 1
张三 2
张三 3
李四 1
李四 2

判断某个用户是否同时某几样物品,物品用逗号分割。返回值任意,只要能判断出正误就行。
如:判断张三是否拥有1,2两样物品,正确
如:判断张三是否拥有1,4两样物品,错误
...全文
193 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ap05115 2012-03-22
  • 打赏
  • 举报
回复
select
(case
when t.姓名 like '%'|| '物品1'||'%' and t.roleid like '%'||'物品2''||'%' then
'正确'
else
'不正确'
end)
from (
select 姓名,wm_concat(物品) 物品from table group by 姓名
) t where t.姓名= '张三'
  • 打赏
  • 举报
回复
smartzhai123 2012-03-21
  • 打赏
  • 举报
回复
type sybs is table of number index by binary_integer;

create function pd (cust varchar2,wp sybs)--参数为1用户,参数2为要判断的物品数组
return varchar2 is
str varchar2(50);
v_num number;
v_retu varchar2;
begin
select wm_concat(物品) into str from table where 用户=cust;
for syb sybs in wp loop
v_num:=instr(str,syb);
if v_num=0 then
v_retu:='错误';
exit;
end if;
v_retu:='正确';
end loop;
return v_retu;
end;
smartzhai123 2012-03-21
  • 打赏
  • 举报
回复
type sybs is table of number index by binary_integer;

create function pd (cust varchar2,wp sybs)
return varchar2 is
str varchar2(50);
v_num number;
v_retu varchar2;
begin
select wm_concat(物品) into str from table where 用户=cust;
for syb sybs in wp loop
v_num:=instr(str,syb);
if v_num=0 then
v_retu:='错误';
exit;
end if;
v_retu:='正确';
end loop;
return v_retu;
end;
贝鱼 2012-03-21
  • 打赏
  • 举报
回复

CREATE FUNCTION CS(V_NAME VARCHAR2, V_STR VARCHAR2)

RETURN VARCHAR2 IS
V_NUM NUMBER;
V_FLAG VARCHAR2(10);
BEGIN
FOR I IN (SELECT REGEXP_SUBSTR(V_STR, '[^,]+', 1, ROWNUM) STR
FROM DUAL
CONNECT BY ROWNUM <= LENGTH(REGEXP_REPLACE(V_STR, '[^,]+')) + 1) LOOP
V_NUM:=INSTR(V_NAME,I.STR);
IF V_NUM = 0 THEN
V_FLAG := '错误';
EXIT;
ELSE
V_FLAG := '正确';
END IF;
END LOOP;
RETURN V_FLAG;
END;

SELECT NAME, CS(WM_CONCAT(物品),变量值) FROM table1 GROUP BY NAME
贝鱼 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxyzxq2008 的回复:]
SQL code

--需要判断哪个,你就传递什么值,直接like就行!
select count(*) from (
select 用户,wm_concat(物品) 物品 from table1 group by 用户
)
where 物品 like '%1,3%'
and 用户 = '张三'

--或者,用instr函数
select 用户,deocde(instr(物品,……
[/Quote]
这个也不行吧~如果所拥有物品是'1,2,3,4',而变量值是'1,3',很明显是同时拥有的,但是用你上面的返回的是'错误'了~
还是写个函数吧~
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxyzxq2008 的回复:]

SQL code
--需要判断哪个,你就传递什么值,直接like就行!
select count(*) from (
select 用户,wm_concat(物品) 物品 from table1 group by 用户
)
where 物品 like '%1,3%'
and 用户 = '张三'

--或者,用instr函数
select 用户,deocde(instr(物品,变量值),0,"错……
[/Quote]

自己写了一半,发现大大已经写的有了
lxyzxq2008 2012-03-17
  • 打赏
  • 举报
回复
--需要判断哪个,你就传递什么值,直接like就行!
select count(*) from (
select 用户,wm_concat(物品) 物品 from table1 group by 用户
)
where 物品 like '%1,3%'
and 用户 = '张三'

--或者,用instr函数
select 用户,deocde(instr(物品,变量值),0,"错误","正确")
from (
select 用户,wm_concat(物品) 物品 from table1 group by 用户
)
ICE-word 2012-03-16
  • 打赏
  • 举报
回复
这样的话!用子查询 LIKE来判断吧!
bean_sql 2012-03-16
  • 打赏
  • 举报
回复
写一个函数把,
把传递的值进行拆分下...
临摹 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bin3509 的回复:]

SELECT max(decode(MAX(DECODE( t.用户,'张三', wm_concat(t.物品) ),'1,2',正确,'1,4',错误 ))FROM table1
[/Quote]
我要是传1,5呢??
ICE-word 2012-03-16
  • 打赏
  • 举报
回复
SELECT max(decode(MAX(DECODE( t.用户,'张三', wm_concat(t.物品) ),'1,2',正确,'1,4',错误 ))FROM table1

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧