网站信息维护亳州公司做网站
比如一张表:
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(str IN VARCHAR2, strlist IN VARCHAR2
) RETURN NUMBER
ISpos NUMBER;  
BEGINSELECT INSTR(',' || strlist || ',', ',' || str || ',') INTO pos FROM DUAL;RETURN pos;
END;
/
 
解释:
这个函数接受两个字符串参数:
str 		-   要查找的字符串
strlist     -   字符串列表,以逗号分隔
函数使用INSTR和双逗号进行匹配查找,返回str在strlist中的位置(从1开始)。
如果未找到,返回0。
 
使用示例:
SELECT find_in_set('b','a,b,c,d') FROM DUAL; -- 返回 2 
SELECT find_in_set('x','a,b,c,d') FROM DUAL; -- 返回 0
 
则:
select * from artile where find_in_set('3',type)<>0;
 
mysql可接受0或其它number做为where 条件,oracle只接受表达式做为where 条件。
You have to grow up, you can live anywhere
