流计算 Oceanus 字符串操作函数

功能描述:连接两个字符串,返回两个字符串拼接后的结果,等同于 CONCAT(string1, string2)
语法:string1 || string2
示例测试语句:SELECT string1 || string2 FROM Test ;
测试数据和结果。

相关产品
流计算 Oceanus 产品页,含版本规格、价格与购买入口。

一、函数

函数名 功能描述
string1 || string2 连接两个字符串,返回两个字符串拼接后的结果,等同于 CONCAT(string1, string2)。
CHAR_LENGTH(string) 返回字符串的长度。
CHARACTER_LENGTH(string) 与 CHAR_LENGTH(string) 相同。
UPPER(string) 返回 string 的全大写字母形式。
LOWER(string) 返回 string 的全小写字母形式。
POSITION(string1 IN string2) 获取 string1 在 string2 中第一次出现的位置(位置从1开始计数)。当 string1 在 string2 中找不到时,返回0。
TRIM({BOTH |LEADING |TRAILING }string1 FROM string2 ) 从 string2 中除去字符串首尾/首位/末尾的 string1。默认情况下,首尾的空格都被删除。
LTRIM(string) 去掉 string 字符串最左边的所有空格。例如 LTRIM(' Hello') 会返回 'Hello'。
RTRIM(string) 去掉 string 字符串最右边的所有空格。例如 RTRIM(' World ') 会返回 ' World'。
REPEAT(string, integer) 将 string 字符串重复 integer 次。例如 REPEAT('Meow', 3) 会返回 'MeowMeowMeow'。
REGEXP_REPLACE(string1, string2, string3) 对 string1 字符串以 string2 表示的正则表达式进行替换,替换内容是 string3。例如 REGEXP_REPLACE('banana', 'a|n', 'A') 返回 'bAAAAA'。
REPLACE(string1, string2, string3) 将 string1 字符串中所有的 string2 替换为 string3。例如 REPLACE('banana', 'a', 'A') 返回 'bAnAnA'。
OVERLAY(string1 PLACING string2 FROM start_pos [ FOR length ]) 将 string1 从第 start_pos 位(start_pos 从1开始计数)开始的子串替换为 string2。可以指定替换的长度。
SUBSTRING(string from pos [ FOR length]) 获取从 pos 位开始的子串,默认行为是直到源字符串的最后,可以使用 FOR 来指定子串的长度。其中字符串起始 pos 从1开始计数,而不是0。
REGEXP_EXTRACT(string1, string2[, integer]) 从 string1 中提取正则分组,正则表达式为 string2,第一个括号为第一组,以此类推。可通过第三个参数 integer 来指定所需的分组号(从1开始)。如果不指定分组号或者分组号为0,则表示返回整个正则表达式匹配到的字符串。例如,REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2) 返回 'bar'。
INITCAP(string) 将 string 中的单词,转为以大写字母开头,其他是小写字母(首字母大写)的形式。例如 INITCAP('i have a dream') 返回 'I Have A Dream'。
CONCAT(string1, string2 …) 连接多个字符串。若任意字符串为 NULL,则结果为 NULL。
CONCAT_WS(separator, string1, string2, …) 使用指定的分隔符 separator 连接多个字符串。如果 separator 为 NULL,则结果为 NULL。如果某个字符串为 NULL,则跳过它;但是不会跳过空字符串。例如 CONCAT_WS('~', 'AA','BB', '', 'CC') 会返回 AA~BB~~CC。
LPAD(text, length, padding) 使用 padding 指定的字符串从左侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
RPAD(text, length, padding) 使用 padding 指定的字符串从右侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
FROM_BASE64(string) 将 Base64 编码的 string 字符串解码为字符串。如果 string 为 NULL,则返回 NULL。
TO_BASE64(string) 将 string 表示的字符串编码为 Base64 字符串。
ASCII(string) 返回 string 字符串中第一个字符的 ASCII 码。如果 string 为 NULL,则返回 NULL。例如 ASCII('an apple') 返回97,因为首字母 'a' 的 ASCII 编码是97。
CHR(integer) 返回编码为 integer 的 ASCII 字符。例如 CHR(97) 返回 'a'。
ENCODE(string, charset) 将 string 字符串转码为 charset 指定的字符集编码的 BINARY 类型,例如 ENCODE(hello, 'GBK')。
DECODE(binary, charset) 将 binary 表示的 BINARY 类型以 charset 指定的字符集解码,例如 DECODE(binary_field, 'UTF-16LE')。
INSTR(string1, string2) 返回 string2 在 string1 字符串中首次出现的位置。如果任意参数为 NULL,结果为 NULL。
LEFT(string, n) 返回 string 从左起前 n 个字符。如果 n 为负数,则返回空字符串。如果任意参数为 NULL,结果为 NULL。
RIGHT(string, n) 返回 string 从右起后 n 个字符。如果 n 为负数,则返回空字符串。如果任意参数为 NULL,结果为 NULL。
LOCATE(string1, string2[, integer]) 返回跳过 integer 个字符后,string1 在 string2 中首次出现的位置(参数顺序与 INSTR 函数相反)。如果未找到,则返回0。如果任意参数为 NULL,结果为 NULL。
REGEXP(string, regex) 如果 regex 表示的正则表达式可以匹配 string 中的字符串的任意子串,那么返回 TRUE,否则返回 FALSE。如果任意参数为 NULL,结果为 NULL。
REVERSE(string) 反转 string 字符串。如果任意参数为 NULL,结果为 NULL。
SPLIT_INDEX(string, separator, index) 将 string 表示的字符串以 separator 指定的分隔符拆分,并获取第 index 项,返回值为字符串 VARCHAR 类型。其中 index 从0开始计数。
STR_TO_MAP(string1[, string2, string3]) 将 string1 字符串用 string2 提供的数据分隔符(默认为半角逗号 ,)和 string3 提供的键值间分隔符(默认为半角等号 =)进行拆分,结果为键值对 MAP<string, string> 类型。例如 STR_TO_MAP('k1=v1,k2=v2,k3=v3') 返回键值对(非字符串){'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}。
SUBSTR(string[, pos[, length]]) 返回 string 字符串从 pos 位置开始,长度为 length 的子串。如果不提供 length,则默认到该字符串尾部。
EXPLODE(inputStr, separator) 将某个字符串分割为一张有多行的临时表。这个函数属于 Table Function,需要使用 LATERAL TABLE ( ) 关键字来引用此动态生成的临时表并作为 JOIN 条件的右表。
GET_ROW_ARITY(row) 获取某个 Row 类型对象 row 的列数。
GET_ROW_FIELD_STR(row, index) 获取某个 Row 类型对象 row 的第 index 列的值,index 从0开始计数。返回值为字符串 VARCHAR 类型。
GET_JSON_OBJECT(json_str, path_str) 按 path_str 指定的 JSONPath 路径,获取某个 JSON 字符串 json_str 中的元素,可以任意嵌套。支持的 JSONPath 语法:$表示根对象,.表示子元素,[]表示数组索引,*为数组索引 [] 的通配符。
IS_ALPHA(content) 判断字符串是否只包含字母。
IS_DIGIT(content) 判断字符串是否只包含数字。
MD5(string) 返回字符串的 MD5 值。
POSITION(string1 IN string2) 返回目标字符串 x 在被查询字符串 y 里第一次出现的位置。如果目标字符串 x 在被查询字符串 y 中不存在,返回值为0。
SHA1 返回字符串 expr 的 SHA1 值。
SHA256 返回字符串 expr 的 SHA256 值。
UNHEX UNHEX 用于将十六进制字符串转换为二进制数据(BINARY)。该函数是 HEX 的逆操作,常用于将十六进制编码的数据还原为原始字节。
REGEXP_SUBSTR REGEXP_SUBSTR 用于从字符串中提取匹配正则表达式的子串,返回第一个匹配的子串。该函数常用于从复杂字符串中按模式提取特定内容,如提取数字、邮箱、URL 等。
REGEXP_INSTR REGEXP_INSTR 用于返回字符串中第一个匹配正则表达式的子串的起始位置(从1开始计数)。该函数常用于定位字符串中特定模式出现的位置。
REGEXP_COUNT REGEXP_COUNT 用于统计字符串中匹配正则表达式的次数。该函数常用于计算特定模式在字符串中出现的频率,如统计单词数、数字段数等。
REGEXP_EXTRACT_ALL REGEXP_EXTRACT_ALL 用于从字符串中提取所有匹配正则表达式的子串,返回一个字符串数组。可通过 extractIndex 参数指定提取正则表达式中第几个捕获组的内容。该函数常用于批量提取字符串中所有符合模式的内容。
JSON_VALUE JSON_VALUE 用于从 JSON 字符串中提取指定 JSON Path 对应的标量值,返回字符串类型的结果。该函数常用于解析 JSON 格式的数据字段,提取其中的某个具体属性值。
PRINTF 按照 printf 风格的格式字符串生成格式化字符串。底层实现使用 Java 的 java.util.Formatter 类,并固定以 Locale.US 作为区域设置进行格式化。
TRANSLATE 用于将输入字符串 expr 中出现在 fromStr 中的每个字符替换为 toStr 中对应位置的字符。逐字符一对一映射,大小写敏感,支持 Unicode。
ELT 根据索引返回字符串列表中对应位置的字符串。索引从 1 开始,如果索引小于 1 或大于字符串列表的长度,则返回 NULL。
BTRIM 去除字符串首尾的指定字符。默认去除首尾的空格字符。去除的是首尾所有匹配 trimStr 中任一字符的字符,而不是去除 trimStr 作为整体子串。
STARTSWITH STARTSWITH 用于判断字符串或字节序列 expr 是否以指定的字符串或字节序列 startExpr 开头。
ENDSWITH ENDSWITH 用于判断字符串或字节序列 expr 是否以指定的字符串或字节序列 endExpr 结尾。
URL_DECODE URL_DECODE 用于对 URL 编码后的字符串进行解码,将符合 URL 编码规则的字符串还原为普通字符串。
URL_ENCODE URL_ENCODE 用于将普通字符串编码为适合在 URL 中传输的字符串。
SPLIT SPLIT 的作用是输入字符串 string 按照指定的分隔符 separator 进行切分
JSON_MULTI_VALUE_ARRAY JSON_MULTI_VALUE_ARRAY 用于对 JSON 字符串只解析一次,同时提取多个 JSONPath 路径对应的值,并将结果以 ARRAY<STRING> 数组的形式返回。
JSON_QUOTE JSON_QUOTE 用于将一个字符串转义为合法的 JSON 字符串字面量,并在最外层补上一对双引号:内部的特殊字符会被替换为对应的 JSON 转义序列,非 ASCII 字符会被改写为 \\uXXXX 形式的 Unicode 转义。
JSON_UNQUOTE JSON_UNQUOTE 是 JSON_QUOTE 的逆操作:当输入是被双引号包裹的合法 JSON 字符串时,去掉最外层的双引号并解析其中的 JSON 转义序列,得到原始字符串。

三、||

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试结果(VARCHAR)
Oceanus anus Oceanus

四、CHAR_LENGTH

功能描述:返回字符串的长度

语法:CHAR_LENGTH( string)
示例测试语句:SELECT CHAR_LENGTH(var1) AS length FROM Test;
测试数据和结果:

测试数据(VARCHAR var1) 测试结果(INT length)
Oceanus 7

五、CHARACTER_LENGTH

功能描述:与 CHAR_LENGTH(string) 相同

语法:CHARACTER_LENGTH(string)
示例测试语句:SELECT CHAR_LENGTH(var1) AS length FROM Test;
测试数据和结果:

测试数据(VARCHAR var1) 测试结果(INT length)
Oceanus 7

六、LOWER

功能描述:返回小写字符的字符串。
语法:LOWER(string)
示例测试语句:SELECT LOWER(var1) AS lower FROM Test;
测试数据和结果:

测试数据(VARCHAR var1) 测试结果(VARCHAR lower)
Oceanus oceanus

七、UPPER

功能描述:返回大写字符的字符串。
语法:UPPER( string)
示例测试语句:SELECT UPPER(var1) AS upper FROM Test;
测试数据和结果:

测试数据(VARCHAR var1) 测试结果(VARCHAR upper)
Oceanus OCEANUS

八、TRIM

功能描述:从 string2 中除去字符串首尾/首位/末尾的 string1。默认情况下,首尾的空格都被删除。
语法:TRIM({BOTH | LEADING | TRAILING } string1 FROM string2 )
示例测试语句:SELECT TRIM(BOTH string1 FROM string2) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试结果(VARCHAR res)
a aoceanusa oceanus

九、CONCAT

功能描述:拼接两个或多个字符串值从而组成一个新的字符串。如果任一参数为 NULL 时,则跳过该参数。
语法:CONCAT( string1, string2 …)
示例测试语句:SELECT CONCAT('123', '456', 'abc', 'def') AS res FROM Test;
测试数据和结果:'123456abcdef'

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试数据(VARCHAR string3) 测试数据(VARCHAR string4) 测试结果(VARCHAR res)
123 456 abc def 123456abcdef

十、CONCAT_WS

功能描述:使用指定的分隔符 separator 连接多个字符串。如果 separator 为 NULL,则结果为 NULL。如果某个字符串为 NULL,则跳过它。但是不会跳过空字符串。
语法:CONCAT_WS(separator,string1,string2, …)
示例测试语句:SELECT CONCAT_WS(separator, string1,string2, string3) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR separator) 测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试数据(VARCHAR string3) 测试结果(VARCHAR res)
– AA BB CC AA-BB-CC

十一、INITCAP

功能描述:将 string 中的单词,转为以大写字母开头,其他是小写字母(首字母大写)的形式。
语法:INITCAP(string)
示例测试语句:SELECT INITCAP(var1) AS str FROM Test;
数据和结果:

测试数据(VARCHAR var1) 测试结果(VARCHAR str)
i have a dream I Have A Dream

十二、IS_ALPHA

功能描述:判断字符串是否只包含字母。
语法:IS_ALPHA(content)
示例测试语句:SELECT IS_ALPHA(content) AS result FROM Test;
测试数据和结果:

测试数据(VARCHAR content) 测试结果(BOOLEAN result)
Oceanus true
oceanus123 false
'' false
null false

十三、IS_DIGIT

功能描述:判断字符串是否只包含数字。
语法:IS_DIGIT(content)

示例测试语句:SELECT IS_DIGIT(content) AS result FROM Test;

测试数据和结果:

测试数据(VARCHAR content) 测试结果(BOOLEAN case_result)
58.0 true
58 true
58pl false
'' false
null false

十四、LPAD

功能描述:使用 padding 指定的字符串从左侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
语法:LPAD(text , length , padding)
示例测试语句:SELECT LPAD(test, length, padding) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR text) 测试数据(INT length) 测试数据(VARCHAR padding) 测试结果(VARCHAR res)
oceanus 3 hello hel
oceanus -1 hello ''
oceanus 12 hello hellooceanus

十五、RPAD

功能描述:使用 padding 指定的字符串从右侧填充 text 字符串到指定长度 length。如果 text 比 length 更长,则会截断到 length 的长度。
语法:RPAD(text , length , padding)
示例测试语句:SELECT RPAD(text, length, padding) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR text) 测试数据(INT length) 测试数据(VARCHAR padding) 测试结果(VARCHAR res)
oceanus 3 hello oce
oceanus -1 hello ''
oceanus 12 hello oceanushello

十六、MD5

功能描述:返回字符串的 MD5 值。
语法:MD5(string)
示例测试语句:SELECT MD5(content) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR content) 测试结果(VARCHAR res)
abc 900150983cd24fb0d6963f7d28e17f72

十七、OVERLAY

功能描述:将 string1 从第 start_pos 位(start_pos 从1开始计数)开始的子串替换为 string2。可以指定替换的长度。
语法:SELECT OVERLAY(string1 PLACING string2 FROM start_pos [ FOR length ])
示例测试语句:SELECT OVERLAY(string1 PLACING string2 FROM start_pos FOR length) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试数据(INT start_pos) 测试数据(INT length) 测试结果(VARCHAR res)
oceanus abc 2 2 oabcanus

十八、POSITION

功能描述:返回目标字符串 x 在被查询字符串 y 里第一次出现的位置。如果目标字符串 x 在被查询字符串 y 中不存在,返回值为0。
语法:POSITION(string1 IN string2)
示例测试语句: SELECT POSITION(string1 IN string2) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试结果(VARCHAR res)
nu oceanus 5

十九、GET_JSON_OBJECT(json_str, path_str)

功能描述:按 path_str 指定的 JSONPath 路径,获取某个 JSON 字符串 json_str 中的元素,可以任意嵌套。支持的 JSONPath 语法:$表示根对象,.表示子元素,[]表示数组索引,*为数组索引 [] 的通配符。
语法:GET_JSON_OBJECT(json_str, path_str)
示例测试语句:SELECT GET_JSON_OBJECT(json_str, path_str) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR json_str)
{"school": {"student":[{"num":8,"type":"A"},{"num":9,"type":"B"}],"teacher":{"num":200,"type":"A"} },"headmaster":"mark" }
测试数据(VARCHAR path_str) 测试结果(VARCHAR res)
$.school {\\"student\\":[{\\"num\\":8,\\"type\\":\\"A\\"},{\\"num\\":9,\\"type\\":\\"B\\"}], \\"teacher\\":{\\"num\\":200,\\"type\\":\\"A\\"}}
$.school.student[1] {\\"num\\":9,\\"type\\":\\"B\\"}
$.school.teacher {\\"num\\":200,\\"type\\":\\"A\\"}
$.headmaster mark

20、REPLACE

功能描述:将 string1 字符串中所有的 string2 替换为 string3。
语法:REPLACE(string1, string2, string3)
示例测试语句:SELECT REPLACE( string1, string2, string3) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR string1) 测试数据(VARCHAR string2) 测试数据(VARCHAR string3) 测试结果(VARCHAR res)
banana a A bAnAnA

21、SHA1

功能描述:返回字符串 expr 的 SHA1 值。
语法:SHA1(expr)
示例测试语句:SELECT SHA1(expr) AS res FROM Test;
测试数据和结果:

测试数据(VARCHAR expr) 测试结果(VARCHAR res)
abc a9993e364706816aba3e25717850c26c9cd0d89d

22、SHA256

功能描述:返回字符串 expr 的 SHA256 值。
语法:SHA256(expr)
示例测试语句:SELECT SHA256(expr) FROM Test;
测试数据和结果:

测试数据(VARCHAR expr) 测试结果(VARCHAR res)
abc ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

23、UNHEX

支持版本:1.16及以上版本。

功能描述:UNHEX 用于将十六进制字符串转换为二进制数据(BINARY)。该函数是 HEX 的逆操作,常用于将十六进制编码的数据还原为原始字节。

语法:UNHEX(expr)

示例测试语句:SELECT UNHEX(expr) AS result;

测试数据和结果:

测试数据(VARCHAR expr) 测试结果(VARCHAR res)
466C696E6B Flink

24、REGEXP_SUBSTR

支持版本:1.16及以上版本。

功能描述:REGEXP_SUBSTR 用于从字符串中提取匹配正则表达式的子串,返回第一个匹配的子串。该函数常用于从复杂字符串中按模式提取特定内容,如提取数字、邮箱、URL 等。

语法:REGEXP_SUBSTR(str, regex)

示例测试语句:SELECT REGEXP_SUBSTR(str, regex) AS result;

测试数据和结果:

测试数据(VARCHAR str) 测试数据(VARCHAR regex) 测试结果(VARCHAR res)
Hello 123 World 456 [0-9]+ 123

25、REGEXP_INSTR

支持版本:1.16及以上版本。

功能描述:REGEXP_INSTR 用于返回字符串中第一个匹配正则表达式的子串的起始位置(从1开始计数)。该函数常用于定位字符串中特定模式出现的位置。

语法:REGEXP_INSTR(str, regex)

示例测试语句:SELECT REGEXP_INSTR(str, regex) AS result;

测试数据和结果:

测试数据(VARCHAR str) 测试数据(VARCHAR regex) 测试结果(VARCHAR res)
Hello 123 World [0-9]+ 7

26、REGEXP_COUNT

支持版本:1.16及以上版本。

功能描述:REGEXP_COUNT 用于统计字符串中匹配正则表达式的次数。该函数常用于计算特定模式在字符串中出现的频率,如统计单词数、数字段数等。

语法:REGEXP_COUNT(str, regex)

示例测试语句:SELECT REGEXP_COUNT(str, regex) AS result;

测试数据和结果:

测试数据(VARCHAR str) 测试数据(VARCHAR regex) 测试结果(VARCHAR res)
Hello 123 World 456 Flink 789 [0-9]+ 3

27、REGEXP_EXTRACT_ALL

支持版本:1.16及以上版本。

功能描述:REGEXP_EXTRACT_ALL 用于从字符串中提取所有匹配正则表达式的子串,返回一个字符串数组。可通过 extractIndex 参数指定提取正则表达式中第几个捕获组的内容。该函数常用于批量提取字符串中所有符合模式的内容。

语法:

REGEXP_EXTRACT_ALL(str, regex)

REGEXP_EXTRACT_ALL(str, regex, extractIndex)

示例测试语句1:SELECT REGEXP_EXTRACT_ALL(str, regex) AS result;

测试数据和结果:

测试数据(VARCHAR str) 测试数据(VARCHAR regex) 测试结果(ARRAY<VARCHAR> res)
Hello 123 World 456 Flink 789 [0-9]+ [123, 456, 789]

示例测试语句2:SELECT REGEXP_EXTRACT_ALL(str, regex, extractIndex) AS result;

测试数据和结果:

测试数据(VARCHAR str) 测试数据(VARCHAR regex) 测试数据(INTEGER extractIndex) 测试结果(ARRAY<VARCHAR> res)
Hello 123 World 456 Flink 789 ([a-z]+):([0-9]+) 2 [18, 95, 007]

28、JSON_VALUE

支持版本:1.16及以上版本。

功能描述:JSON_VALUE 用于从 JSON 字符串中提取指定 JSON Path 对应的标量值,返回字符串类型的结果。该函数常用于解析 JSON 格式的数据字段,提取其中的某个具体属性值。

语法:

JSON_VALUE(jsonStr, jsonPath)

示例测试语句1:SELECT JSON_VALUE(jsonStr, jsonPath) AS result;

测试数据和结果:

测试数据(VARCHAR jsonStr) 测试数据(VARCHAR jsonPath) 测试结果(VARCHAR res)
{"name":"Alice","age":30} $.name Alice

示例测试语句2:SELECT JSON_VALUE(jsonStr, jsonPath) AS result;

测试数据和结果:

测试数据(VARCHAR jsonStr) 测试数据(VARCHAR jsonPath) 测试结果(VARCHAR res)
{"data":{"id":1001,"status":"active"}} $.data.status active

29、PRINTF

支持版本:1.16及以上版本。

功能描述:按照 printf 风格的格式字符串生成格式化字符串。底层实现使用 Java 的 java.util.Formatter 类,并固定以 Locale.US 作为区域设置进行格式化。

语法:PRINTF(format[, obj]*)

示例测试语句1:SELECT PRINTF(format[, obj]*) AS result;

测试数据和结果:

测试数据(CHARACTER_STRING str) 测试数据(ANY regex) 测试结果(STRING res)
%08d 1024 00001024
测试数据(CHARACTER_STRING str) 测试数据(ANY regex) 测试结果(STRING res)
%s DATE '2024-07-30' 19934

使用限制:

·format 参数类型限制: 必须是 CHARACTER_STRING 类型,传入非字符串类型(如 INT)会触发验证错误。

·区域设置固定: 底层固定使用 Locale.US,浮点数以英文小数点(.)分隔,不受系统区域设置影响。

·日期时间类型注意: DATE、TIME、INTERVAL 类型格式化时输出的是内部数值(整数),而非人类可读的日期时间字符串。如需格式化日期时间,建议先用 CAST 或 DATE_FORMAT 转换为字符串再传入。

·占位符多于参数: 返回 NULL(不抛异常)。

·参数多于占位符: 忽略多余参数,正常返回结果。

·类型不兼容: 格式说明符与参数类型不兼容时(如用 %d 格式化字符串),返回 NULL(底层通过 try-catch 捕获所有异常)。

30、TRANSLATE

支持版本:1.16及以上版本。

功能描述:用于将输入字符串 expr 中出现在 fromStr 中的每个字符替换为 toStr 中对应位置的字符。逐字符一对一映射,大小写敏感,支持 Unicode。

语法:TRANSLATE(expr, fromStr, toStr)

示例测试语句:SELECT TRANSLATE(expr, fromStr, toStr) AS result;

测试数据和结果:

测试数据(VARCHAR expr) 测试数据(VARCHAR fromStr) 测试数据(VARCHAR toStr) 测试结果(VARCHAR res)
www.apache.org abc 123 www.1p13he.org

使用限制:

·参数类型限制: 三个参数都必须是 CHARACTER_STRING 类型,否则会触发验证错误。

·替换粒度限制: 仅支持单字符到单字符的映射,不支持子串替换。如需子串替换请使用 REPLACE 或 REGEXP_REPLACE。

·不支持正则: fromStr 中的字符按字面意义匹配,. 仅表示英文句号。

·大小写敏感: 大小写不同的字符视为不同字符。

·fromStr 长于 toStr,多出部分对应的字符在 expr 中被删除。

·toStr 长于 fromStr,多出部分被忽略。

·重复字符行为: fromStr 中重复字符仅以第一次出现的映射生效。

·性能注意事项: 内部使用 ThreadLocalCache 缓存 (fromStr, toStr) 对应的映射字典,常量参数下能复用;动态列作 fromStr/toStr 时缓存命中率会下降。

·函数命名: SQL 中使用 TRANSLATE,但底层注册名为 TRANSLATE3,错误信息中可能显示 TRANSLATE3,属于正常现象。

31、ELT

支持版本:1.16及以上版本。

功能描述:根据索引返回字符串列表中对应位置的字符串。索引从 1 开始,如果索引小于 1 或大于字符串列表的长度,则返回 NULL。

语法:ELT(index, expr, exprs…)

示例测试语句:SELECT ELT(index, expr, expr2) AS result;

测试数据和结果:

测试数据(INTEGER index) 测试数据(STRING expr) 测试数据(STRING expr) 测试结果(STRING res)
1 scala java scala

使用限制:

·index 参数仅支持整数类型(INTEGER_NUMERIC),不支持浮点数

·expr 和 exprs 的类型必须一致,不能混合使用 CHARACTER_STRING 和 BINARY_STRING

·exprs 至少需要一个参数

32、BTRIM

支持版本:1.16及以上版本。

功能描述:去除字符串首尾的指定字符。默认去除首尾的空格字符。去除的是首尾所有匹配 trimStr 中任一字符的字符,而不是去除 trimStr 作为整体子串。

语法:

BTRIM(str)

BTRIM(str, trimStr)

示例测试语句1:SELECT BTRIM(str) AS result;

测试数据和结果:

测试数据(STRING str) 测试结果(STRING res)
www.apache.org www.apache.org

示例测试语句2:SELECT BTRIM(str, trimStr) AS result;

测试数据和结果:

测试数据(STRING str) 测试数据(STRING trimStr) 测试结果(STRING res)
##www.apache.org## # www.apache.org

示例测试语句3:SELECT BTRIM(str, trimStr) AS result;

测试数据和结果:

测试数据(STRING str) 测试数据(STRING trimStr) 测试结果(STRING res)
www.apache.org a www.apache.org(首尾没有 'a',不做任何去除)

使用限制:

·trimStr 参数是字符集合,不是子串。BTRIM 会去除首尾所有在 trimStr 中出现的字符

·不支持去除中间的字符,仅去除首尾

·如果输入为 NULL,返回 NULL

33、STARTSWITH

支持版本:1.16及以上版本。

功能描述:STARTSWITH 用于判断字符串或字节序列 expr 是否以指定的字符串或字节序列 startExpr 开头。

函数会按照以下逻辑进行判断:

1. 如果 expr 或 startExpr 中任意一个为 NULL,则返回 NULL;

2. 如果 startExpr 为空(空字符串或长度为 0 的字节序列),则始终返回 TRUE(即使 expr 也为空);

3. 如果 expr 的长度小于 startExpr 的长度,则返回 FALSE;

4. 否则按字节逐位比较 expr 起始部分与 startExpr,完全相等返回 TRUE,否则返回 FALSE。

该函数支持两种入参组合:均为字符串类型(CHAR / VARCHAR / STRING),或均为二进制类型(BINARY / VARBINARY / BYTES)。两个参数的类型族必须保持一致,不允许字符串与二进制混用。

语法:STARTSWITH(expr, startExpr)

示例测试语句:SELECT STARTSWITH(expr, startExpr) AS result;

测试数据和结果:

测试数据(STRING expr) 测试数据(STRING startExpr) 测试结果(STRING res)
www.apache.org ww TRUE

使用限制:

·两个参数类型族不一致(如一个是 STRING,另一个是 BYTES)会触发校验错误。

34、ENDSWITH

支持版本:1.16及以上版本。

功能描述:ENDSWITH 用于判断字符串或字节序列 expr 是否以指定的字符串或字节序列 endExpr 结尾。

函数会按照以下逻辑进行判断:

1. 如果 expr 或 endExpr 中任意一个为 NULL,则返回 NULL;

2. 如果 endExpr 为空(空字符串或长度为 0 的字节序列),则始终返回 TRUE(即使 expr 也为空);

3. 如果 expr 的长度小于 endExpr 的长度,则返回 FALSE;

4. 否则按字节逐位比较 expr 末尾部分与 endExpr,完全相等返回 TRUE,否则返回 FALSE。

该函数支持两种入参组合:均为字符串类型(CHAR / VARCHAR / STRING),或均为二进制类型(BINARY / VARBINARY / BYTES)。两个参数的类型族必须保持一致,不允许字符串与二进制混用。

语法:ENDSWITH(expr, endExpr)

示例测试语句:SELECT ENDSWITH(expr, endExpr) AS result;

测试数据和结果:

测试数据(STRING expr) 测试数据(STRING endExpr) 测试结果(STRING res)
www.apache.org org TRUE

使用限制:

·两个参数类型族不一致(如一个是 STRING,另一个是 BYTES)会触发校验错误。

35、URL_DECODE

支持版本:1.16及以上版本。

功能描述:URL_DECODE 用于对 URL 编码后的字符串进行解码,将符合 URL 编码规则的字符串还原为普通字符串。该函数常用于处理 URL 查询参数、HTTP 表单参数、日志中的编码字段等。

语法:

URL_DECODE(input)

URL_DECODE(input, encoding)

示例测试语句1:SELECT URL_DECODE(input) AS result;

测试数据和结果:

测试数据(STRING input) 测试结果(STRING res)
name%3DAlice%26city%3DShenzhen name=Alice&city=Shenzhen

36、URL_ENCODE

支持版本:1.16及以上版本。

功能描述:URL_ENCODE 用于将普通字符串编码为适合在 URL 中传输的字符串。该函数常用于构造 URL 查询参数、处理 HTTP 表单字段,或对中文、空格、特殊字符进行转义。

语法:

URL_ENCODE(input)

URL_ENCODE(input, encoding)

示例测试语句:SELECT URL_ENCODE(input) AS result;

测试数据和结果:

测试数据(STRING input) 测试结果(STRING res)
name=Alice&city=Shenzhen name%3DAlice%26city%3DShenzhen
测试数据(STRING input) 测试结果(STRING res)
中文 %E4%B8%AD%E6%96%87

37、SPLIT

支持版本:1.16及以上版本。

功能描述:SPLIT 的作用是输入字符串 string 按照指定的分隔符 separator 进行切分。

语法:

SPLIT(str, separator)

SPLIT 的返回类型与是否是“非严格模式”(高级参数 execution.in-non-strict-mode)有关,默认值为 DISABLED。

高级参数配置 SPLIT 返回类型 说明
execution.in-non-strict-mode: ENABLED ARRAY<STRING> 返回按 separator 拆分后的字符串数组,数组元素顺序与原字符串中的出现顺序一致。
execution.in-non-strict-mode: DISABLED ROW 返回 ROW 类型结果

注意:高级参数 execution.in-non-strict-mode 设置为 ENABLED 时,则函数行为和社区一致。

示例测试语句1:SELECT SPLIT(str, separator) AS result;

当高级参数 execution.in-non-strict-mode 设置为 ENABLED 时:

测试数据和结果:

测试数据(STRING input) 测试数据(STRING separator) 测试结果(ARRAY<STRING> res)
Jack,John,Mary , ['Jack', 'John', 'Mary']

38、JSON_MULTI_VALUE_ARRAY

支持版本:1.16及以上版本。

功能描述:JSON_MULTI_VALUE_ARRAY 用于对 JSON 字符串只解析一次,同时提取多个 JSONPath 路径对应的值,并将结果以 ARRAY<STRING> 数组的形式返回。 该函数是 JSON_VALUE 的高吞吐替代方案,适用于需要从同一条 JSON 消息中一次性提取多个字段的场景,避免对同一 JSON 字符串反复解析。

语法:

JSON_MULTI_VALUE_ARRAY(jsonStr, path1 [, path2, …, pathN])

参数说明

参数 类型 是否必填 说明
jsonStr STRING 是 需要解析的 JSON 字符串。如果为 NULL,函数返回 NULL。
path1, path2, …, pathN STRING 是 JSONPath 表达式(如 $.a.b),必须为非空字符串常量,至少需要提供一个路径。路径在作业编译时一次性编译,运行时不再重复解析。

返回值

返回类型 说明
ARRAY<STRING> 返回由各路径提取结果组成的字符串数组。数组本身可为 NULL;数组元素也可为 NULL。可通过 arr[1]、arr[2](SQL 标准 1 基索引)访问对应路径的结果。

错误与空值语义(固定行为)

返回类型 说明
jsonStr 为 NULL 返回 NULL(NULL ON ERROR)
jsonStr 不是合法 JSON 或为空字符串 返回 NULL(NULL ON ERROR)
某路径未匹配到节点 该位置元素为 NULL(NULL ON EMPTY)
某路径匹配到 JSON null 该位置元素为 NULL

上述行为为固定语义,不支持 ON EMPTY / ON ERROR / RETURNING 子句自定义。

示例

示例1:基本多路径提取

SELECT JSON_MULTI_VALUE_ARRAY('{"a":1,"b":"hello","c":true}', '$.a', '$.b', '$.c') AS result;

返回结果:

[1, hello, true]

示例 2:路径未匹配返回 null

SELECT JSON_MULTI_VALUE_ARRAY('{"a":1,"b":null}', '$.a', '$.b', '$.c') AS result;

返回结果:

[1, null, null]

39、JSON_QUOTE

支持版本:1.16及以上版本。

功能描述:JSON_QUOTE 用于将一个字符串转义为合法的 JSON 字符串字面量,并在最外层补上一对双引号:内部的特殊字符会被替换为对应的 JSON 转义序列,非 ASCII 字符会被改写为 \\uXXXX 形式的 Unicode 转义。输入为 NULL 时返回 NULL。

语法:

JSON_QUOTE(str)

参数说明

参数 类型 是否必填 说明
str CHAR / VARCHAR / STRING 是 需要被转义并加引号的字符串。

返回值

返回类型 说明
STRING 返回外层带双引号、内部按 JSON 规则转义的字符串;输入为 NULL 时返回 NULL。

示例

示例 1:普通字符串补充双引号

SELECT JSON_QUOTE('V') AS result;

返回结果:

"V"

示例 2:包含特殊字符的字符串被转义

SELECT JSON_QUOTE('a"b' || CHR(9) || 'c') AS result;

返回结果:

"a\\"b\\tc"

使用限制

·仅接受字符串类型入参,不会对内容是否已经是合法 JSON 进行校验,输入会被一律视作普通字符串再转义。

40、JSON_UNQUOTE

支持版本:1.16及以上版本。

功能描述:JSON_UNQUOTE 是 JSON_QUOTE 的逆操作:当输入是被双引号包裹的合法 JSON 字符串时,去掉最外层的双引号并解析其中的 JSON 转义序列,得到原始字符串;输入为 NULL 时返回 NULL。

语法:

JSON_UNQUOTE(str)

参数说明

参数 类型 是否必填 说明
str CHAR / VARCHAR / STRING 是 需要被还原的字符串,可能是合法 JSON,也可能不是。

返回值

返回类型 说明
STRING 输入为带引号的合法 JSON 字符串时返回去引号并反转义后的内容;其余情况下原样返回输入;输入为 NULL 时返回 NULL。

示例

示例 1:还原带引号的 JSON 字符串

SELECT JSON_UNQUOTE('"abc"') AS result;

返回结果:

abc

示例 2:输入为非字符串的合法 JSON 时原样返回

SELECT JSON_UNQUOTE('{"key":"value"}') AS result;

返回结果:

{"key":"value"}

使用限制

·仅顶层是带引号的 JSON 字符串才会被反转义,其他形态(对象、数组、裸标量、非法 JSON)均按原样返回。

赞 (0)
上一篇 4天前
下一篇 4天前