sql find_in_set在oracle下的解决方案
比如一张表:
artile (id,type,content);
type:1表示文艺类,2表示小说类,3表示传记,4表示传说,等等5,6,7,8
表数据:
id type content
1 3,1 dfasdfasdf
2 1,3,6,8 dfasdf
3 6,8,9 add
现在要找出3传记类的artile记录
mysql
select * from artile where find_in_set('3',type);
oralce 语句实现
select * from artile da where instr(','||type||',',',3,')<>0;
(原理:将1,3,6,8转为 ,1,3,6,8,然后找出 ,3,的位置
将3,1转为 ,3,1,然后找出 ,3,的位置
则<>0的即为存在,返回记录)
用自定义一个find_in_set的oracle function 来解决
create or replace function find_in_set(arg1 in varchar2,arg2 in varchar)
return number is Result number;
begin
select instr(','||arg2||',' , ','||arg1||',') into Result from dual;
return(Result);
end find_in_set;
则:select * from artile where find_in_set('3',type)<>0;
mysql可接受0或其它number做为where 条件,oracle只接受表达式做为where 条件
Oracle创建find_in_set函数:
CREATE OR REPLACE function find_in_set(arg1 in varchar2,arg2 in varchar)
return number is Result number;
begin
select instr(','||arg2||',' , ','||arg1||',') into Result from dual;
return(Result);
end find_in_set;
本文介绍了如何在Oracle数据库中使用自定义函数find_in_set解决类型列中查找特定值的问题,如查找类型为'3'的传记类article。通过 instr 函数配合字符串操作,实现类似 MySQL 的 find_in_set 功能。
2145

被折叠的 条评论
为什么被折叠?



