函数
函数名 | 功能描述 |
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 转义序列,得到原始字符串。 |
示例
||
功能描述:连接两个字符串,返回两个字符串拼接后的结果,等同于 CONCAT(string1, string2)
语法:string1 || string2
示例测试语句:SELECT string1 || string2 FROM Test ;
测试数据和结果:
测试数据(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 |
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 |
SHA1
功能描述:返回字符串 expr 的 SHA1 值。
语法:SHA1(expr)
示例测试语句:SELECT SHA1(expr) AS res FROM Test;
测试数据和结果:
测试数据(VARCHAR expr) | 测试结果(VARCHAR res) |
abc | a9993e364706816aba3e25717850c26c9cd0d89d |
SHA256
功能描述:返回字符串 expr 的 SHA256 值。
语法:SHA256(expr)
示例测试语句:SELECT SHA256(expr) FROM Test;
测试数据和结果:
测试数据(VARCHAR expr) | 测试结果(VARCHAR res) |
abc | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
UNHEX
支持版本:1.16及以上版本。
功能描述:UNHEX 用于将十六进制字符串转换为二进制数据(BINARY)。该函数是 HEX 的逆操作,常用于将十六进制编码的数据还原为原始字节。
语法:UNHEX(expr)
示例测试语句:SELECT UNHEX(expr) AS result;
测试数据和结果:
测试数据(VARCHAR expr) | 测试结果(VARCHAR res) |
466C696E6B | Flink |
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 |
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 |
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 |
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) | 测试结果(VARCHAR res) |
Hello 123 World 456 Flink 789 | ([a-z]+):([0-9]+) | 2 | [18, 95, 007] |
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 |
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 捕获所有异常)。
TRANSLATE
支持版本:1.16及以上版本。
功能描述:用于将输入字符串 expr 中出现在 fromStr 中的每个字符替换为 toStr 中对应位置的字符。逐字符一对一映射,大小写敏感,支持 Unicode。
语法:TRANSLATE(expr, fromStr, toStr)
示例测试语句:SELECT TRANSLATE(expr, fromStr, toStr) AS result;
测试数据和结果:
测试数据(VARCHAR expr) | 测试数据(VARCHAR fromStr) | 测试数据(VARCHAR fromStr) | 测试结果(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,属于正常现象。
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 至少需要一个参数
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
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)会触发校验错误。
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)会触发校验错误。
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 |
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 |
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 类型结果 |
示例测试语句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'] |
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]
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 进行校验,输入会被一律视作普通字符串再转义。
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)均按原样返回。