ORACLE串函数
CONCAT
INITCAP
INSTR
LPAD
RPAD
LTRIM
RTRIM
TRIM
LENGTH
SUBSTR
INSTR
CONCAT
函数方式:CONCAT(STRING1,STRING2)
将两个字符串内容进行拼接
例如:SELECT CONCAT('AA','BB') AS A FROM DUAL;
输出结果:AABB
比较,只能两个字符串之间的拼接,相比之下,||,可多个字符串之间进行拼接
其他拼接函数上:wm_concat(column), listagg(col1,splittype) within group(order by col1) [over(partition by col2 order by col1) ] [group by col2]
INITCAP
函数方式:INITCAP(STRING)
首字母转译成大写,其它转译成小写
例如:SELECT INITCAP('t12acBAA') AS A FROM DUAL;
输出结果:T12acbaa
LOWER相对于使用,则将字符都转义为小写
UPPER相对于使用,则将字符都转义为大写
LPAD&RPAD
函数方式:LPAD(STRING,LENGTH,[defaultvalue])
以某字符向左或右,填充到指定长度,如果字符长度超出了指定的长度,那么会按照指定的长度进行截取,类似输出结果为SUBSTR(STRING,1,指定长度);如果填充的默认值无指定写,那么会以空字符进行填充;defaultvalue,可以是多字符串,最终若填充除余,则会按照字符顺序填充下来
例如:SELECT LPAD('ABC',22,'0a') AS A FROM DUAL;
输出结果:0a0a0a0a0a0a0a0a0a0ABC
LTRIM&RTRIM&TRIM
函数方式:LTRIM(STRING,[defaultvalue])
以某字符向左或右,删除指定字符,直到STRING中下一字符不在指定字符中,则停止去除;defaultvalue,可以是多字符串,达到效果是,STRING按照defaultvalue单个字符拆分循环形式去除,而不是以整体字符串形式匹配删除;defaultvalue若不填写,实现效果为去除空字符形式;
例如:SELECT LTRIM('DAFSCEADGQEAGASDASDBASDDDSLKXXCZNKNNWQBCSKJNXSJDSAKXCHUZDDWQKJDUASDH','ABCDEFGHIJKLMNOPQRSTUVWXYZ') AS A FROM DUAL;
输出结果:
TRIM(STRING)
默认去除字符串两边空格
TRIM(BOTH/LEADING/TRAILING defaultvalue FROM STRING)
TRIM若想去除指定的字符,则以此方式进行,defaultvalue只能是单字符,不能是字符集合;其中BOTH 关键字,表示去除字符串首尾两端的字符;LEADING,表示去除字符串最前面字符;TRAILING,表示去除字符串最后面字符;这种方式去除字符串与LTRIM和RTRIM区别点,一是被去除的只能是单一字符,二是匹配的首字母不在去除字符中,则停止。TRIM在去除字符串是,也采用的是,直到下一字符不是需要被去除的字符时,则停止
LTRIM 对应自定义函数逻辑F_L_TRIM
CREATE OR REPLACE FUNCTION F_LTRIM
/*
等比LTRIM
P_STR:待删除字段
P_SET_VALUE:待匹配字符
待删除字段逐一字符在带匹配字符中进行匹配,若是都没匹配上,则退出删除
*/
(
P_STR VARCHAR2,
P_SET_VALUE VARCHAR2
) RETURN VARCHAR2 IS
V_ROWNUMBER INTEGER;
V_LENGTH INTEGER;
V_SET_ROWNUMBER INTEGER;
V_SET_LENGTH INTEGER;
V_STR VARCHAR2(4000);
V_WAIT_CHR VARCHAR2(10);
V_REGX_CHR VARCHAR2(10);
BEGIN
V_LENGTH := LENGTH(P_STR);
V_SET_LENGTH := LENGTH(P_SET_VALUE);
IF P_STR IS NULL
OR P_SET_VALUE IS NULL
OR V_LENGTH <= 0
OR V_SET_LENGTH <= 0
THEN
RETURN P_STR;
END IF;
V_STR := P_STR;
V_ROWNUMBER := 1;
LOOP
IF V_ROWNUMBER > V_LENGTH
THEN
EXIT;
END IF;
--取当前字符
V_WAIT_CHR := SUBSTR(V_STR, 1, 1);
--每个待删除字符去匹配时,重置遍历条件
V_SET_ROWNUMBER := 1;
LOOP
IF V_SET_ROWNUMBER > V_SET_LENGTH
THEN
--V_SET_ROWNUMBER值大于字符长度,说明都没匹配上,则跳出删除
RETURN V_STR;
END IF;
V_REGX_CHR := SUBSTR(P_SET_VALUE, V_SET_ROWNUMBER, 1);
IF V_WAIT_CHR = V_REGX_CHR
THEN
--匹配上,则跳出匹配循环,并删除该字符,进入下一字符匹配
V_STR := TRIM(LEADING V_REGX_CHR FROM V_STR);
EXIT;
END IF;
V_SET_ROWNUMBER := V_SET_ROWNUMBER + 1;
END LOOP;
V_ROWNUMBER := V_ROWNUMBER + 1;
END LOOP;
RETURN V_STR;
END F_LTRIM;
LENGTH
函数方式:LENGTH(STRING)
传入的字符若为数值类型,则会被默认转译为字符类型,再进行获取长度;
获取字符长度,若字符为空,返回长度也为一个空值,非0;
LONG类型使用LENGTH函数,会报错
SUBSTR
函数方式:SUBSTR(STRING,START_INDEX,[COUNT])
传入的字符,从指定开始索引位置开始截取,一般从1开始,表述从第一个字符开始截取,COUNT若配置,表述截取字符的个数,不配置则截取到字符串的最后一个
START_INDEX为正数,则表述从左到右数取下标位置,开始截取;为负数时,则表述从右到左进行定位下标,离最右边还具有多少个位数;
COUNT 只能为正数,否则返回结果为NULL值
例如:SELECT SUBSTR('123',1,2) AS A FROM DUAL;
返回结果:12
INSTR
函数方式:INSTR(STRING, default_value, [start_index, occurrence])
参数:STRING:传入的字符
default_value:待查找字符
Start_index:从传入的字符开始查找下标位置
occurrence:符合条件的索引第几个
INSTR表述查找需要确认的字符串位置,start_index,若没配置参数,则默认从传入字符首字母开始匹配,occurence参数表述,传入字符中符合default_value值的形成数组后,指定取第几个的索引值。
例如:SELECT INSTR('123aa233aa','aa',1,2) AS A FROM DUAL;
返回结果:9