SQL: split_part & substring_index & substr

时间:2024-03-28 10:18:52

一、split_part 切割函数

支持该函数:阿里云SQL、Postgresql

1.阿里云SQL

1.1 函数说明

命令格式: split_part(string, separator, start[, end]) 

用途: 拆分字符串,返回指定的部分 

参数说明: 
● string:string类型,要拆分的字符串。如果是bigint, double. datetime类型会隐式转换到string类型后参加运算,其它类型报异常。
● separator:string类型常量,拆分用的分隔符,可以是一个字符,也可以是一个字符串,其它类型会引发异常。 
● start:bigint类型常量,必须大于0。非常量或其它类型抛异常。返回段的开始编号(从1开始),如果没有指定end,则返回start指定的段。
● end:bigint类型常量,大于等于start。返回段的截止编号,非常量或其他类型会引发异常。(start 必须大于 0, end 必须大于或等于 start, 否则抛异常,结果为start到end的闭区间) 
返回值:separator连接的字符串片断.若任意参数为NULL,返回NULL;若separator为空串,返回string.  

备注:
● 如果separator不存在于string中,且start指定为1,返回整个string。 若输入为空串,输出为空串。
● 如果start越区,比如字符串拆分完有6个片段,但start大于6,返回空串(’’)。
● 若end大于片段个数,按片段个数处理。

1.2 示例

1.2.1 有三个参数时

SQL: split_part & substring_index & substr

说明:

a. remark字段内容为“[email protected]@https://baoxian.axa.cn/downPolicyTicket.do?type=L&policyNo=E79FAE0FD8EE6D1EC03C063B53385017FF25471A23FF26A0”样式,每个内容中包含两个@;

b. 示例中split_part函数有3个参数,当第3个参数为“1”时,函数返回被@分割的第一段内容(即第一个@前面的内容);

当第3个参数为2时,函数返回被@分割的第二段内容(即第一个@之后和第二个@之间的内容);

当第3个参数为3时,函数返回被@分割的第三段内容(即第二个@之后的内容);

当第3个参数大于3时,函数返回空值(因为remark字段内容只被两个@分割成了三段);

1.2.1 有四个参数时

SQL: split_part & substring_index & substr

说明:

a. remark字段内容同 ‘1.2.1 有三个参数时’ ;

b. 当有四个参数时,第三和第四个参数的数值表示返回第几段到第几段之间的内容,返回值包含中间的分隔符@

c. 当 split_part(remark, '@' , 1 ,3) 时,函数返回被@分割的第一段内容到第二段内容之间的部分,包含了@;

当 split_part(remark, '@' , 1 ,2) 时,函数返回被@分割的第一段内容到第三段内容之间的部分,包含了第二段内容和两个@;

当 split_part(remark, '@' , 2 ,3) 时,函数返回被@分割的第二段内容到第三段内容之间的部分,包含了@;

 

二、substring_index 截取函数

支持该函数:阿里云SQL

1.阿里云SQL

1.1 函数说明

命令格式:substring_index(str, delim, count) 

参数说明:

str:需要拆分的字符串;

delim:分隔符,根据此字符来拆分字符串;

count:当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符

补充:只能有3个参数

1.2 示例

SQL: split_part & substring_index & substr

说明:

a. 当第三个参数=1时,返回第一个分割符@前面的内容;

当第三个参数=2时,返回第二个分割符@前面的内容,依次类推;

当第三个参数>2时,返回字段全部内容(只有2个@分隔符);

当第三个参数=-1时,返回倒数第一个分割符@后面的内容,依次类推;

b. 当 split_part 函数使用4个参数格式时,且第三个参数=1,返回的内容跟 substring_index 函数相同;