字符串函数
DLI常用字符串函数如下所示:
运算符 |
返回类型 |
描述 |
---|---|---|
VARCHAR |
两个字符串的拼接。 |
|
INT |
返回字符串中的字符数量。 |
|
INT |
返回字符串中的字符数量。 |
|
VARCHAR |
拼接两个或多个字符串值从而组成一个新的字符串。如果任一参数为NULL时,则跳过该参数。 |
|
VARCHAR |
将每个参数值和第一个参数separator指定的分隔符依次连接到一起组成新的字符串,长度和类型取决于输入值。 |
|
INT |
返回字符串的HASH_CODE()的绝对值。参数除string外,也支持int/bigint/float/double。 |
|
VARCHAR |
返回字符串,将单词首字母转换为大写,其余为小写。 单词是由非字母、数字、字符分隔的字母、数字、字符序列。 |
|
BOOLEAN |
判断字符串是否只包含字母。 |
|
BOOLEAN |
判断字符串是否只包含数字。 |
|
BOOLEAN |
判断字符串是否是数值。 |
|
BOOLEAN |
判断字符串是否是合法的URL地址。 |
|
VARCHAR |
获取json字符串中指定path的值。 |
|
VARCHAR |
获取键值对字符串中某一个key对应的值。 |
|
VARCHAR |
返回小写字符的字符串。 |
|
VARCHAR |
将pad字符串拼接到str字符串的的左端,直到新的字符串达到指定长度len为止。 |
|
VARCHAR |
返回字符串的MD5值。如果参数为空串(即参数为")时,则返回空串。 |
|
VARCHAR |
用y替换x的子串。从start_position开始,替换length+1个字符。 |
|
INT |
返回目标字符串x在被查询字符串y里第一次出现的位置。如果目标字符串x在被查询字符串y中不存在,返回值为0。 |
|
VARCHAR |
字符串替换函数,将字符串str1中的所有str2替换成str3。
|
|
VARCHAR |
将pad字符串拼接到str字符串的的右端,直到新的字符串达到指定长度len为止。 |
|
STRING |
返回字符串expr的SHA1值。 |
|
STRING |
返回字符串expr的SHA256值。 |
|
ARRAY[STRING] |
将字符串value按delimiter分隔为字符串数组。 |
|
VARCHAR |
返回从给定位置开始的A的子字符串。起始位置从1开始。 |
|
STRING |
从B中除去字符串首尾/首位/末尾的A。默认情况下,首尾的A都被删除。 |
|
VARCHAR |
返回转换为大写字符的字符串。 |
CONCAT_WS
- 功能描述
将每个参数值和第一个参数separator指定的分隔符依次连接到一起组成新的字符串,长度和类型取决于输入值。
如果separator取值为null,则将separator视作与空串进行拼接。如果其它参数为null,在执行拼接过程中跳过取值为null的参数。
- 语法
VARCHAR CONCAT_WS(VARCHAR separator, VARCHAR var1, VARCHAR var2, ...)
- 参数说明
- separator:分隔符。
- var1:字符串。
- var2:字符串。
- 示例
- 测试语句
SELECT CONCAT_WS("-", "abc", "def", "ghi", "jkl");
- 测试结果
"abc-def-ghi-jkl"
- 测试语句
JSON_VALUE
- 功能描述
- 语法
VARCHAR JSON_VALUE(VARCHAR content, VARCHAR path)
- 参数说明
- content:输入字符串。
- path:要获取的path路径。
- 示例
- 测试语句
SELECT JSON_VALUE(content, path) AS case_result FROM T1;
- 测试数据和结果
表9 测试数据和结果 测试数据(content,path)
测试结果(case_result)
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
$
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
$.a1
v1
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
$.a4
{"a41":"v41","a42": ["v1","v2"]}
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
$.a4.a42
["v1","v2"]
{ "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}
$.a4.a42[0]
v1
- 测试语句
KEY_VALUE
- 功能描述
- 语法
VARCHAR KEY_VALUE(VARCHAR content, VARCHAR split1, VARCHAR split2, VARCHAR key_name)
- 参数说明
- content:输入字符串。
- split1:多个键值对分隔符。
- split2:key/value分隔符。
- key_name:要获取的键名称。
- 示例
- 测试语句
SELECT KEY_VALUE(content, split1, split2, key_name) AS case_result FROM T1;
- 测试数据和结果
表10 测试数据和结果 测试数据(content, split1, split2, key_name)
测试结果(case_result)
k1=v1;k2=v2
;
=
k1
v1
null
;
=
k1
null
k1=v1;k2=v2
null
=
k1
null
- 测试语句
LPAD
- 功能描述
- 语法
VARCHAR LPAD(VARCHAR str, INT len, VARCHAR pad)
- 参数说明
- str:拼接前的字符串。
- len:拼接后的字符串的长度。
- pad:被拼接的字符串。
- 任意参数为null时返回null。
- len为负数时返回为null。
- len不大于str长度,返回str裁剪为len长度的字符串。如果len大于str长度时,则返回null。
- 示例
- 测试语句
SELECT LPAD("adc", 2, "hello"), LPAD("adc", -1, "hello"), LPAD("adc", 10, "hello");
- 测试结果
"ad",,"helloheadc"
- 测试语句
OVERLAY
- 功能描述
- 语法
VARCHAR OVERLAY ( (VARCHAR x PLACING VARCHAR y FROM INT start_position [ FOR INT length ]) )
- 参数说明
- x:字符串。
- y:字符串。
- start_position:起始位置。
- length(可选):字符长度。
- 示例
- 测试语句:
OVERLAY('abcdefg' PLACING 'xyz' FROM 2 FOR 2) AS result FROM T1;
- 测试结果:
表12 测试结果 result
axyzdefg
- 测试语句:
RPAD
- 功能描述
将pad字符串拼接到str字符串的的右端,直到新的字符串达到指定长度len为止。
- 如果任意参数为null时,则返回null。
- len为负数时,返回为null。
- pad为空串,如果len小于str长度,返回str裁剪为len长度的字符串。
- 如果len大于str长度,则返回null。
- 语法
VARCHAR RPAD(VARCHAR str, INT len, VARCHAR pad)
- 参数说明
- str:启始的字符串。
- len:新的字符串的长度。
- pad:需要重复补充的字符串。
- 示例
- 测试语句
SELECT RPAD("adc", 2, "hello"), RPAD("adc", -1, "hello"), RPAD("adc", 10, "hello");
- 测试结果
"ad",,"adchellohe"
- 测试语句
STRING_TO_ARRAY
- 功能描述
delimiter使用的是java的正则表达式,若使用特殊字符则需要转义。
- 语法
ARRAY[String] STRING_TO_ARRAY(STRING value, VARCHAR delimiter)
- 参数说明
- value:字符串。
- delimiter:分隔符。
- 示例
- 测试语句
SELECT string_to_array("127.0.0.1", "\\."), string_to_array("red-black-white-blue", "-");
- 测试结果
[127,0,0,1],[red,black,white,blue]
- 测试语句
SUBSTRING
- 功能描述
- 如果未指定len,则截取从位置start开始,到字符串结尾的子字符串。
- 如果指定len,则截取从位置start开始,长度为len的子字符串。
start从1开始,start为0时当1看待,为负数时表示从字符串末尾倒序计算位置。
- 语法
VARCHAR SUBSTRING(STRING A FROM INT start)
或
VARCHAR SUBSTRING(STRING A FROM INT start FOR INT len)
- 参数说明
- A:指定的字符串。
- start:在字符串A中开始截取的位置。
- len:截取的长度。
- 示例
- 测试语句1
SELECT SUBSTRING("123456" FROM 2);
- 测试结果1
"23456"
- 测试语句2
SELECT SUBSTRING("123456" FROM 2 FOR 4);
- 测试结果2
"2345"
- 测试语句1