ORACLE-串函数基本使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值