标签:com mit oracl 包含 function func png event col
有时候比如一个字符串 : namestr 内容:‘张三,李四,王五,刘八,肖六’ 。
一张表:pati_info_basic 字段:姓名,年龄等..
我们要从该表中查出上述字符串包含的所有人的信息。
此时用:
select * from pati_info_basic where patiname where patiname in namestr
肯定是不行的。而且有时候姓名之间不是用逗号相隔,而是用其他符号相隔的呢?
一个实现思路是 :先把namestr字符串转成 张三李四各为一个元组,再用in查询。
实现步骤:
CREATE OR REPLACE TYPE "TY_ROW_STR_SPLIT" as object (strValue VARCHAR2 (4000))
CREATE OR REPLACE TYPE "TY_TBL_STR_SPLIT" IS TABLE OF ty_row_str_split
CREATE OR REPLACE FUNCTION string_split(p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_tbl_str_split IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2(4000); str_split ty_tbl_str_split := ty_tbl_str_split(); BEGIN len := LENGTH(p_str); len1 := LENGTH(p_delimiter); WHILE j < len LOOP j := INSTR(p_str, p_delimiter, i); IF j = 0 THEN j := len; str := SUBSTR(p_str, i); str_split.EXTEND; str_split(str_split.COUNT) := ty_row_str_split(strValue => str); IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR(p_str, i, j - i); i := j + len1; str_split.EXTEND; str_split(str_split.COUNT) := ty_row_str_split(strValue => str); END IF; END LOOP; RETURN str_split; END string_split;
select * from table(string_split(‘张三||李四||王五||刘八||肖六‘ ,‘||‘))
这时候用in查询就没问题了,其中‘||’符号可替换为任意符号。
标签:com mit oracl 包含 function func png event col
原文地址:https://www.cnblogs.com/zhoufei2514/p/10185528.html