You need to enable JavaScript to run this app.
导航
数据转换函数库
最近更新时间:2024.11.18 19:55:14首次发布时间:2024.11.18 19:55:14

本文将为您列举解决方案数据转换模式支持的一些函数。

注意

目前对字符串和时间戳输入和输出的默认时区 UTC+8。您可以使用 CONVERT_TZ 函数转为期望的其他时区
若无特殊说明,当参数为 null 时,返回结果会是 null。

比较函数

函数名

描述

value1 = value2

如果 value1 等于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value1 <> value2

如果 value1 不等于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value1 > value2

如果 value1 大于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value1 >= value2

如果 value1 大于等于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value1 < value2

如果 value1 小于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value1 <= value2

如果 value1 小于等于 value2,返回 true;如果 value1 或 value2 任一为 null,返回 null。

value IS NULL

如果 value 为 null,返回 true。

value IS NOT NULL

如果 value 不为 null,返回 true。

value1 BETWEEN value2 AND value3

如果 value1 大于等于 value2 且 小于等于 value3 则返回 true。

注意

当前版本暂不支持 SYMMETRIC 关键字。

例如:

  • 12 BETWEEN 15 AND 12 返回 false
  • 12 BETWEEN 10 AND NULL 返回 null
  • 12 BETWEEN NULL AND 10 返回 false

value1 NOT BETWEEN value2 AND value3

如果 value1 小于 value2 或大于 value3 则返回 true。

注意

当前版本暂不支持 SYMMETRIC 关键字

string1 LIKE string2

如果 string1 匹配模式 string2,返回 true;如果 string1 或 string2 为 null,返回 null。
其中 % 符号可匹配多个字符,_ 仅可匹配单个字符。
例如 'HELLO' LIKE '_EL%' 返回 true

string1 NOT LIKE string2

如果 string1 不匹配模式 string2,返回 true;如果 string1 或 string2 为 null,返回 null。
其中 % 符号可匹配多个字符,_ 仅可匹配单个字符。
例如 'HELLO' NOT LIKE '_EL%' 返回 false

value1 IN (value2 [, value3]* )

如果 value1 存在于给定列表中(value2, value3, ...),返回 true
如果 value1 为 null,总是返回 null。

value1 NOT IN (value2 [, value3]* )

如果 value1 不存在于给定列表中(value2, value3, ...),返回 true
如果 value1 为 null,总是返回 null。

逻辑函数

函数名

描述

boolean1 OR boolean2

如果 boolean1 为 true 或 boolean2 为 true,返回 true。

注意

暂不支持含 null 的参数

boolean1 AND boolean2

如果 boolean1 为 true 且 boolean2 为 true,返回 true。

注意

暂不支持含 null 的参数

NOT boolean

如果 boolean 为 false,返回 true;如果 boolean 为 true,返回 false。

注意

暂不支持含 null 的参数

boolean IS FALSE

如果 boolean 为 false,返回 true;如果 boolean 为 true,返回 false。

注意

暂不支持含 null 的参数

boolean IS NOT FALSE

如果 boolean 为 true,返回 true;如果 boolean 为 false,返回 false。

注意

暂不支持含 null 的参数

boolean IS TRUE

如果 boolean 为 true,返回 true;如果 boolean 为 false,返回 false。

注意

暂不支持含 null 的参数

boolean IS NOT TRUE

如果 boolean 为 false,返回 true;如果 boolean 为 true,返回 false。

注意

暂不支持含 null 的参数

算术函数

函数名

描述

numeric1 + numeric2

返回 numeric1 + numeric2 的值

注意

暂不支持含 null 的参数

numeric1 - numeric2

返回 numeric1 - numeric2 的值

注意

暂不支持含 null 的参数

numeric1 * numeric2

返回 numeric1 乘 numeric2 的积

注意

暂不支持含 null 的参数

numeric1 / numeric2

返回 numeric1 除以 numeric2 的商

注意

暂不支持含 null 的参数

numeric1 % numeric2

返回 numeric1 除以 numeric2 的余数(取余)

注意

暂不支持含 null 的参数

ABS(numeric)

返回 numeric 的绝对值。
如果 numeric 为 null,则返回 null。

CEIL(numeric)

将数值向上取整,并返回大于或等于该数值的最小整数。
如果 numeric 为 null,则返回 null。

FLOOR(numeric)

将数值向下取整,并返回大于或等于该数值的最小整数。
如果 numeric 为 null,则返回 null。

  • ROUND(numeric)
  • ROUND(numeric, int)

将数值四舍五入取整。

  • 如果不传入第二个参数,则返回大于或等于该数值的最小整数。
  • 如果传入第二个参数 int,则取整到第 int 位小数。
  • 如果 numeric 为 null,则返回 null。

UUID()

返回随机生成的 UUID 字符串

  • LOG(numeric2)
  • LOG(numeric1, numeric2)
  • 如果只传入一个参数,则返回 numeric2 的自然对数。
  • 如果传入两个参数,则返回以 numeric1 为底的 numeric2 的对数。

注意

目前 numeric2 必须大于 0,numeric1 必须大于 1。

EXP(numeric)

返回 e 的 numeric 次方。

POWER(numeric1, numeric2)

返回 numeric1 的 numeric2 次方。

SQRT(numeric)

返回 numeric 的平方根。

  • RAND()
  • RAND(seed)
  • RAND(from, to)
  • 无参数:返回介于 0.0(包含)和 1.0(不包含)之间的伪随机双精度值。
  • 一个参数:返回介于 0.0(包含)和 1.0(不包含)之间的伪随机双精度值,使用初始种子整数。如果两个 RAND 函数具有相同的初始种子,它们将返回相同的数字序列。
  • 两个参数:返回介于 0(包含)和指定整数(不包含)之间的伪随机整数值。

注意

seed 参数不接受 null 值。当 from 或 to 参数任意为 null 时,结果为 null

  • RAND_INTEGER(to)
  • RAND_INTEGER(seed, to)
  • 一个参数:返回介于 0(包含)和指定整数(不包含)之间的伪随机整数值。
  • 两个参数:返回介于 0(包含)和指定值(不包含)之间的伪随机整数值,使用初始种子。如果两个 RAND_INTEGER 函数具有相同的初始种子和边界,它们将返回相同的数字序列。

注意

seed、to 参数均不接受 null 值

TRUNCATE(numeric1, integer2)

返回一个数值,截断到 integer2 位小数。
如果 numeric1 或 integer2 为 null,则返回 null。
如果 integer2 为 0,结果将没有小数点或小数部分。
integer2 可以为负数,以使数值的小数点左侧的 integer2 位数变为零。
该函数也可以仅传入一个 numeric1 参数,而不设置 integer2。如果未设置 integer2,函数将像 integer2 为 0 一样进行截断。
例如:truncate(42.345, 2) 返回 42.34,truncate(42.345) 返回 42.0。

字符串函数

函数名

描述

string1

注意

如果任意参数为 null,则结果整体为 null。

CHAR_LENGTH(string)

返回字符串的字符个数。如果字符串为 null,则返回 null。

UPPER(string)

返回字符串的大写形式。如果字符串为 null,则返回 null。

LOWER(string)

返回字符串的小写形式。如果字符串为 null,则返回 null。

TRIM(string1)

移除字符串 string1 两端的空格/空白符号。

注意

目前暂不支持 LEADING、TRAILING 和 FROM 关键字

REGEXP_REPLACE(string1, string2, string3)

返回一个字符串,该字符串是从 string1 中将所有与正则表达式 string2 连续匹配的子字符串替换为 STRING3 的结果。如果任意参数为 null,结果为 null。
例如,REGEXP_REPLACE('foobar', 'oo

SUBSTRING(string FROM integer1 [ FOR integer2 ])

返回字符串 STRING 从位置 integer1 开始(注意起始位置为 1)的子字符串,长度为 integer2(如果不指定 FOR 关键字,则默认为到字符串末尾)。

注意

integer1 和 integer2 参数不接受 null 值

SUBSTR(string, integer1[, integer2])

返回字符串 STRING 从位置 integer1 开始(注意起始位置为 1)的子字符串,长度为 integer2(如果不指定长度,则默认为到字符串末尾)。

注意

integer1 和 integer2 参数不接受 null 值

CONCAT(string1, string2,…)

返回 string1 和 string2 字符串拼接的结果,与

注意

如果任意参数为 null,则结果整体为 null。

OVERLAY(str1 PLACING str2 FROM int1 [ FOR int2 ])

返回一个字符串,该字符串将 string1 中从位置 integer1 开始的 integer2 个字符(默认为 string2 的长度)替换为 string2。如果任意参数为 null,结果为 null。
例如,OVERLAY('This is an old string' PLACING ' new' FROM 10 FOR 5) 返回 "This is a new string"。

PRINTF(format[, obj]*)

使用 Java printf 函数的语义来返回格式化后的字符串。如果字符串为 null,则结果为 null。
例如 PRINTF('User: %s, Count: %d', 'Kyle', 10) 返回 'User: Kyle, Count: 10' 字符串。

STARTSWITH(expr, startExpr)

判断 expr 是否以 startExpr 开头。如果 startExpr 为空,则结果为 true。
如果任意参数为 null,则返回 null。

ENDSWITH(expr, endExpr)

判断 expr 是否以 startExpr 结尾。如果 startExpr 为空,则结果为 true。
如果任意参数为 null,则返回 null。

REGEXP(string1, string2)

如果 string1 的任何(可能为空的)子字符串匹配 Java 正则表达式 string2 则返回 true,否则返回 false。
如果任何参数为 null,则返回 null。

REGEXP_EXTRACT(string1, string2[, integer])

返回一个字符串,该字符串从 string1 中提取,使用指定的正则表达式 string2 和匹配组索引 integer。
注意:正则表达式匹配组索引从 1 开始,0 表示匹配整个正则表达式。
此外,正则表达式匹配组索引不得超过定义的组数。
例如,REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2) 返回 "bar"。

LPAD(string1, integer, string2)

返回一个新字符串,该字符串是将 string1 使用 string2 在左侧填充至指定的整数长度。
如果 string1 的长度短于整数,则会将 string1 缩短至整数长度。
例如,LPAD('hi', 4, '??') 返回 "??hi"; LPAD('hi', 1, '??') 返回 "h"。

RPAD(string1, integer, string2)

返回一个新字符串,该字符串是将 string1 使用 string2 在右侧填充至指定的整数长度。
如果 string1 的长度短于整数,则会将 string1 缩短至整数长度。
例如,RPAD('hi', 4, '??') 返回 "hi??"; RPAD('hi', 1, '??') 返回 "h"。

LOCATE(string1, string2[, integer])

返回 string2 中从位置 integer 开始搜索 string1 的第一次出现的位置。如果未找到,则返回 0。
如果任何参数为 null,则返回 null。

STR_TO_MAP(string1[, string2, string3])

返回一个映射,将 string1 通过分隔符拆分为 <String, String> 键值对。string2 是对的分隔符,默认为 , 符号
string3 是键值分隔符,默认为 = 符号。
如果希望创建非 String 类型的键值对,请使用 CREATE_MAP 方法

REVERSE(string)

返回 string 的倒序形式。如果 string 为 null,则返回 null。

JSON 函数

函数名

描述

GET_JSON_OBJECT(jsonStr, pathStr[, defaultVal])

返回 jsonStr(JSON 字符串)中 pathStr 给定位置的元素值(可以是多种类型)。
可以通过第三个参数 defaultVal 来指定获取不到元素时的默认值。
例如 jsonStr 为 '{"name":"John","age":30,"address":{"city":"New York","zip":"10001"}}',pathStr 为 '.name',则返回值为 'John'

GET_JSON_STRING(jsonStr, pathStr[, defaultVal])

返回 jsonStr(JSON 字符串)中 pathStr 给定位置的元素值,并统一转为 String 类型。
例如 jsonStr 为 '{"name":"John","age":30,"address":{"city":"New York","zip":"10001"}}',pathStr 为 '.name',则返回值为 'John'

TO_JSON(value[, defaultVal])
JSON_STRING(value)

将 value 对象(可以是多种类型)转换为 JSON 字符串。
TO_JSON 函数支持可选的第二个参数 defaultVal。当 value 为 null 时,可返回 defaultVal 的字符串。

JSON_EXISTS(jsonValue, path)

判定 jsonValue 字符串是否满足给定的 path 路径搜索条件。如果符合可以找到该路径,则返回 true。

注意

暂不支持 ON ERROR 等关键字。如果任意参数为 null,则返回 false。

加解密、编码、散列函数

函数名

描述

AES_ENCRYPT(plaintext, base64Key, [algorithm])

通过给定的加密算法(默认为 'aes-256-cbc'),以给定的 base64Key(原始秘钥长度需要满足 16 字节、24 字节或 32 字节)来加密 plaintext 字符串,输出为 Base64 编码的字符串格式。
如果参数为 null,则输出 null。

目前支持的算法为:
'aes-256-cbc', 'aes-128-cbc', 'aes-192-cbc', 'aes-256-ecb', 'aes-128-ecb', 'aes-192-ecb'

AES_DECRYPT(encryptedBase64, base64Key, [algorithm])

通过给定的加密算法(默认为 'aes-256-cbc'),以给定的 base64Key(原始秘钥长度需要满足 16 字节、24 字节或 32 字节)来解密以 Base64 编码的 encryptedBase64 字符串,输出字符串格式。
如果参数为 null,则输出 null。

目前支持的算法为:
'aes-256-cbc', 'aes-128-cbc', 'aes-192-cbc', 'aes-256-ecb', 'aes-128-ecb', 'aes-192-ecb'

TO_BASE64(plaintext)

将 plaintext 字符串以 Base64 格式编码并返回。
如果参数为 null,则输出 null。

FROM_BASE64(encoded)

将 Base64 编码的字符串以 Base64 格式解码并返回原文。
如果参数为 null,则输出 null。

DECODE(str, charset)

使用提供的字符集 charset(例如 'US-ASCII','ISO-8859-1','UTF-8','UTF-16BE','UTF-16LE','UTF-16')将字符串 str 解码。
如果任一参数为 null,则结果也为 null。

ENCODE(str, charset)

使用提供的字符集 charset(例如 'US-ASCII','ISO-8859-1','UTF-8','UTF-16BE','UTF-16LE','UTF-16')将字符串 str 编码,输出为二进制 byte 数组。
可以配合 TO_BASE64 函数进一步将输出的 byte 数组编码为字符串。
如果任一参数为 null,则结果也为 null。

  • MD5(str)
  • SHA1(str)
  • SHA224(str)
  • SHA256(str)
  • SHA384(str)
  • SHA512(str)

对 str 应用以函数名表示的散列算法(例如 MD5)。
如果 str 为 null,则结果为 null。

时间相关函数

函数名

描述

LOCALTIME

返回当前的时间(精度为毫秒),类型为 Time,即包含时、分、秒、毫秒

注意

目前只支持 UTC+8 时区

LOCALTIMESTAMP

返回当前的时间戳(精度为毫秒),类型为 Timestamp,即包含年、月、日、时、分、秒、毫秒

注意

目前只支持 UTC+8 时区

CURRENT_TIME

返回当前的时间(精度为毫秒),类型为 Time,即包含时、分、秒、毫秒。

注意

目前只支持 UTC+8 时区,因此该函数与 LOCALTIME 函数同义。

CURRENT_DATE

返回当前的日期,类型为 Date,即包含年、月、日

注意

目前只支持 UTC+8 时区

INTERVAL string range

可给某个 Timestamp 类型的返回函数增加或减去一段时长(可部分替代 TIMESTAMPADD 函数)。
目前 range 只支持 DAY HOUR MINUTE SECOND 四种。

例如 TO_TIMESTAMP('2024-10-08 23:59:59', 'yyyy-MM-dd HH:mm:ss') - INTERVAL 2 DAY <= NOW()

NOW()

返回当前的时间戳(精度为毫秒),类型为 Timestamp,即包含年、月、日、时、分、秒、毫秒。

注意

目前只支持 UTC+8 时区,因此该函数与 LOCALTIMESTAMP 同义。

DATE_FORMAT(timestamp, string)

将时间戳转换为指定日期格式字符串的值。格式字符串与 Java 的 SimpleDateFormat 兼容。

TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)

返回 timepoint1 和 timepoint2 之间的(有符号)时间单位数。
间隔的单位由第一个参数指定,该参数应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。

例如 TIMESTAMPDIFF(HOUR, TIMESTAMPADD(DAY, -1, NOW()), NOW()) 返回 24

CONVERT_TZ(string1, string2, string3)

将日期时间字符串 string1(默认 ISO 时间戳格式为 'yyyy-MM-dd HH:mm:ss')从时区 string2 转换为时区 string3。时区的格式可以是缩写,例如 'PST'(可能有歧义)。推荐使用时区全名,例如 'Asia/Shanghai',或自定义 ID,例如 'UTC+8:00'。

例如,CONVERT_TZ('2024-11-08 18:35:33', 'Asia/Shanghai', 'Asia/Tokyo') 返回 '2024-11-08 19:35:33'。

TIMESTAMPADD(timeintervalunit, interval, timepoint)

返回一个新的时间值,该时间值是在 timepoint 上加上一个(带符号的)整数间隔。间隔的单位由 unit 参数指定,该参数应为以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH、YEAR。暂不支持 WEEK 和 QUARTER 等其他值。

例如 TIMESTAMPADD(DAY, -1, NOW()) 返回一天前的时间戳

FROM_UNIXTIME(numeric[, string])

以格式 string(默认为 'yyyy-MM-dd HH:mm:ss')来输出数字参数 numberic 的值。numeric 表示自 '1970-01-01 00:00:00’ 以来的秒数,可由 UNIX_TIMESTAMP() 函数生成。

注意

目前只支持 UTC+8 时区

  • UNIX_TIMESTAMP()
  • UNIX_TIMESTAMP(timestampStr[, format])

返回以秒为单位获取当前的 Unix 时间戳。
如果提供了 timestampStr 字符串参数,则默认以 'yyyy-MM-dd HH:mm:ss' 格式来将字符串转为 Unix 时间戳。
如果额外还提供了 format 参数,可以以 Java SimpleDateFormat 的格式来自定义 timestampStr 字符串的格式。

UNIX_TIMESTAMP_MILLIS()

返回以毫秒为单位获取当前的 Unix 时间戳。

TO_DATE(string1[, string2])

将格式为 string2 的日期字符串 string1(默认格式为 'yyyy-MM-dd')转换为 Date 类型。

TO_TIMESTAMP(string1[, string2])

将格式为 string2 的日期时间字符串 string1(默认格式为 'yyyy-MM-dd HH:mm:ss')转换为时间戳。

条件函数

函数名

描述

CASE value WHEN value1_1 [, value1_2]* THEN RESULT1 (WHEN value2_1 [, value2_2 ]* THEN result_2)* (ELSE result_z) END

当值 value 首次符合 (valueX_1, valueX_2, …) 中的值,返回对应的结果 resultX。
当没有匹配到时,如果提供了 result_z 则返回 result_z;否则返回 null。

CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END

当第一个条件 conditionX 满足时,返回 resultX。
如果没有条件满足,如果提供了 result_z 则返回 result_z;否则返回 null。

COALESCE(value1 [, value2]*)

返回第一个非 null 的参数。如果所有参数都是 null,则也返回 null。

IF(condition, true_value, false_value)

如果满足 condition 条件,则返回 true_value;否则返回 false_value。
例如,IF(5 > 3, 5, 3) 返回 5。

NULLIF(value1, value2)

如果 value1 等于 value2,则返回 null;否则返回 value1。
例如,NULLIF(5, 5) 返回 null;NULLIF(5, 0) 返回 5。

IS_NUMBER(str)
IS_DECIMAL(str)

判断 str 给定的字符串是否是一个合法数字,如果符合则返回 true. 如果字符串为 null 则返回 null。
例如 '123'、'1.23','-123.45'、'1e10' 都属于合法数字。
IS_NUMBER 采用 Java Double 类型接受的标准来判断;IS_DECIMAL 采用 Java BigDecimal 类型接受的标准来判断,适合超大数字。

IS_SPACES(str)

判断 str 给定的字符串是否由空白符(空格、tab)组成,如果符合则返回 true. 如果字符串为 null 则返回 null。

注意

null 和空字符串不包含任何符号,因此返回 false。

IS_ALPHA(str)

IS_ALPHA(str) 函数用于检查给定的字符串 str 是否仅由字母组成。如果 str 中的所有字符都是字母,则返回 TRUE;否则返回 FALSE。

注意

null 和空字符串不包含任何符号,因此返回 false。

IS_DIGIT(str)

判断 str 给定的字符串是否全由数字组成,如果符合则返回 true. 如果字符串为 null 则返回 null。

注意

null 和空字符串不包含任何符号,因此返回 false。

类型转换函数

函数名

描述

CAST(value AS type)

将 value 转为指定的 type 类型,例如 CAST(value AS VARCHAR) 将 value 转为字符串类型。

TYPEOF(input)

返回 input 字段的实际 Java 对象类型(大写形式),例如 STRING, INTEGER, ARRAY, MAP 等。
对于 null 值,返回 'NULL' 字符串。

集合函数

函数名

描述

CARDINALITY(array)

返回数组中的元素数量。如果数组为 null,则返回 0.

CARDINALITY(map)

返回 Map 中的元素数量。如果参数为 null,则返回 0.

CREATE_MAP(k1, v1, k2, v2 ...)

创建一个 Map 键值对,k 和 v 支持任意类型

CREATE_LIST(...)

创建一个 List 数组,元素支持任意类型