字符串函数
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长度的字符串。
- 示例
- 测试语句
SELECT LPAD("adc", 2, "hello"), LPAD("adc", -1, "hello"), LPAD("adc", 10, "hello"); - 测试结果
"ad",,"helloheadc"
- 测试语句
RPAD
- 功能描述
将pad字符串拼接到str字符串的的右端,直到新的字符串达到指定长度len为止。
- 如果任意参数为null时,则返回null。
- len为负数时,返回为null。
- pad为空串,如果len小于str长度,返回str裁剪为len长度的字符串。
- 语法
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

