1、 通过lengthb和replace函数巧妙结合的自定义函数获取 CREATE OR REPLACE FUNCTION STR_CNT_NISJ(MOTHER_CHAR VARCHAR2, SUB_CHAR VARCHAR2) RETURN NUMBER IS V_NUM NUMBER := 0; BEGIN SELECT (LENGTHB(MOTHER_CHAR) - LENGTHB(REPLACE(MOTHER_CHAR, SUB_CHAR, ''))) / LENGTHB(SUB_CHAR) INTO V_NUM FROM DUAL; RETURN V_NUM; END; / 2、 通过for循环自定义函数 CREATE OR REPLACE FUNCTION STR_CNT(MOTHER_CHAR VARCHAR2,SUB_CHAR VARCHAR2) RETURN NUMBER IS V_NUM NUMBER(10):=0; BEGIN FOR I IN 1..LENGTH(MOTHER_CHAR) LOOP IF INSTR(MOTHER_CHAR,SUB_CHAR,1,I)>0 THEN V_NUM:=V_NUM+1; ELSE RETURN V_NUM; END IF; END LOOP; RETURN V_NUM; END; / 3、 总结 方法一比较巧妙,也可以不生成函数,直接lengthb结合replace直接select获取;方法二为传统思维。