SQL 语句中可用的函数
数据类型判断函数
函数名 | 函数作用 | 参数 | 返回值 |
---|---|---|---|
is_null | 判断变量是否为空值 | Data | Boolean 类型的数据。如果为空值(undefined) 则返回 true,否则返回 false |
is_not_null | 判断变量是否为非空值 | Data | Boolean 类型的数据。如果为空值(undefined) 则返回 false,否则返回 true |
is_str | 判断变量是否为 String 类型 | Data | Boolean 类型的数据。 |
is_bool | 判断变量是否为 Boolean 类型 | Data | Boolean 类型的数据。 |
is_int | 判断变量是否为 Integer 类型 | Data | Boolean 类型的数据。 |
is_float | 判断变量是否为 Float 类型 | Data | Boolean 类型的数据。 |
is_num | 判断变量是否为数字类型,包括 Integer 和 Float 类型 | Data | Boolean 类型的数据。 |
is_map | 判断变量是否为 Map 类型 | Data | Boolean 类型的数据。 |
is_array | 判断变量是否为 Array 类型 | Data | Boolean 类型的数据。 |
is_not_null(1) = true
is_str(1) = false
is_str('val') = true
is_bool(true) = true
is_int(1) = true
is_float(1) = false
is_float(1.234) = true
is_num(2.3) = true
is_num('val') = false
数据类型转换函数
函数名 | 函数作用 | 参数 | 返回值 |
---|---|---|---|
str | 将数据转换为 String 类型 | Data | String 类型的数据。无法转换将会导致 SQL 匹配失败 |
str_utf8 | 将数据转换为 UTF-8 String 类型 | Data | UTF-8 String 类型的数据。无法转换将会导致 SQL 匹配失败 |
bool | 将数据转换为 Boolean 类型 | Data | Boolean 类型的数据。无法转换将会导致 SQL 匹配失败 |
int | 将数据转换为整数类型 | Data | 整数类型的数据。无法转换将会导致 SQL 匹配失败 |
float | 将数据转换为浮点型类型 | Data | 浮点型类型的数据。无法转换将会导致 SQL 匹配失败 |
float2str | 将浮点型数字以指定精度转换为字符串 | 1. 浮点型数字 2. 精度 | 字符串 |
map | 将数据转换为 Map 类型 | Data | Map 类型的数据。无法转换将会导致 SQL 匹配失败 |
str_utf8(1234) = '1234'
bool('true') = true
int('1234') = 1234
float('3.14') = 3.14
float2str(20.2, 10) = '20.2'
float2str(20.2, 17) = '20.19999999999999928'
函数名 | 函数作用 | 参数 | 返回值 |
---|---|---|---|
lower | 转为小写 | 1. 原字符串 | 小写字符串 |
upper | 转为大写 | 1. 原字符串 | 大写字符串 |
trim | 去掉左右空格 | 1. 原字符串 | 去掉空格后的字符串 |
ltrim | 去掉左空格 | 1. 原字符串 | 去掉空格后的字符串 |
rtrim | 去掉右空格 | 1. 原字符串 | 去掉空格后的字符串 |
reverse | 字符串反转 | 1. 原字符串 | 翻转后的字符串 |
strlen | 取字符串长度 | 1. 原字符串 | 整数值,字符长度 |
substr | 取字符的子串 | 1. 原字符串 2. 起始位置. 注意: 下标从 0 开始 | 子串 |
substr | 取字符的子串 | 1. 原字符串 2. 起始位置 3. 要取出的子串长度. 注意: 下标从 0 开始 | 子串 |
split | 字符串分割 | 1. 原字符串 2. 分割符子串 | 分割后的字符串数组 |
split | 字符串分割, 只查找左边第一个分隔符 | 1. 原字符串 2. 分割符子串 3. ‘leading’ | 分割后的字符串数组 |
split | 字符串分割, 只查找右边第一个分隔符 | 1. 原字符串 2. 分割符子串 3. ‘trailing’ | 分割后的字符串数组 |
concat | 字符串拼接 | 1. 左字符串 2. 右符子串 | 拼接后的字符串 |
tokens | 字符串分解(按照指定字符串符分解) | 1. 输入字符串 2. 分割符或字符串 | 分解后的字符串数组 |
tokens | 字符串分解(按照指定字符串和换行符分解) | 1. 输入字符串 2. 分割符或字符串 3. ‘nocrlf’ | 分解后的字符串数组 |
sprintf | 字符串格式化, 格式字符串的用法详见 https://erlang.org/doc/man/io.html#fwrite-1 里的 Format 部分 | 1. 格式字符串 2,3,4… 参数列表。参数个数不定 | 分解后的字符串数组 |
pad | 字符串补足长度,补空格,从尾部补足 | 1. 原字符串 2. 字符总长度 | 补足后的字符串 |
pad | 字符串补足长度,补空格,从尾部补足 | 1. 原字符串 2. 字符总长度 3. ‘trailing’ | 补足后的字符串 |
pad | 字符串补足长度,补空格,从两边补足 | 1. 原字符串 2. 字符总长度 3. ‘both’ | 补足后的字符串 |
pad | 字符串补足长度,补空格,从头部补足 | 1. 原字符串 2. 字符总长度 3. ‘leading’ | 补足后的字符串 |
pad | 字符串补足长度,补指定字符,从尾部补足 | 1. 原字符串 2. 字符总长度 3. ‘trailing’ 4. 指定用于补足的字符 | 补足后的字符串 |
pad | 字符串补足长度,补指定字符,从两边补足 | 1. 原字符串 2. 字符总长度 3. ‘both’ 4. 指定用于补足的字符 | 补足后的字符串 |
pad | 字符串补足长度,补指定字符,从头部补足 | 1. 原字符串 2. 字符总长度 3. ‘leading’ 4. 指定用于补足的字符 | 补足后的字符串 |
replace | 替换字符串中的某子串,查找所有匹配子串替换 | 1. 原字符串 2. 要被替换的子串 3. 指定用于替换的字符串 | 替换后的字符串 |
replace | 替换字符串中的某子串,查找所有匹配子串替换 | 1. 原字符串 2. 要被替换的子串 3. 指定用于替换的字符串 4. ‘all’ | 替换后的字符串 |
replace | 替换字符串中的某子串,从尾部查找第一个匹配子串替换 | 1. 原字符串 2. 要被替换的子串 3. 指定用于替换的字符串 4. ‘trailing’ | 替换后的字符串 |
replace | 替换字符串中的某子串,从头部查找第一个匹配子串替换 | 1. 原字符串 2. 要被替换的子串 3. 指定用于替换的字符串 4. ‘leading’ | 替换后的字符串 |
regex_match | 判断字符串是否与某正则表达式匹配 | 1. 原字符串 2. 正则表达式 | true 或 false |
regex_replace | 替换字符串中匹配到某正则表达式的子串 | 1. 原字符串 2. 正则表达式 3. 指定用于替换的字符串 | 替换后的字符串 |
ascii | 返回字符对应的 ASCII 码 | 1. 字符 | 整数值,字符对应的 ASCII 码 |
find | 查找并返回字符串中的某个子串,从头部查找 | 1. 原字符串 2. 要查找的子串 | 查抄到的子串,如找不到则返回空字符串 |
find | 查找并返回字符串中的某个子串,从头部查找 | 1. 原字符串 2. 要查找的子串 3. ‘leading’ | 查抄到的子串,如找不到则返回空字符串 |
find | 查找并返回字符串中的某个子串,从尾部查找 | 1. 原字符串 2. 要查找的子串 3. ‘trailing’ | 查抄到的子串,如找不到则返回空字符串 |
Map 函数
map_get('a', json_decode( '{ "a" : 1 }' )) = 1
map_get('b', json_decode( '{ "a" : 1 }' ), 2) = 2
map_get('a', map_put('a', 2, json_decode( '{ "a" : 1 }' ))) = 2
数组函数
函数名 | 函数作用 | 参数 | 返回值 |
---|---|---|---|
nth | 取第 n 个元素,下标从 1 开始 | 1. 起始位置 2. 原数组 | 第 n 个元素 |
length | 获取数组的长度 | 1. 原数组 | 数组长度 |
sublist | 取从第一个元素开始、长度为 len 的子数组。下标从 1 开始 | 1. 长度 len 2. 原数组 | 子数组 |
sublist | 取从第 n 个元素开始、长度为 len 的子数组。下标从 1 开始 | 1. 起始位置 n 2. 长度 len 3. 原数组 | 子数组 |
first | 取第 1 个元素。下标从 1 开始 | 1. 原数组 | 第 1 个元素 |
last | 取最后一个元素。 | 1. 原数组 | 最后一个元素 |
contains | 判断数据是否在数组里面 | 1. 数据 2. 原数组 | Boolean 值 |
nth(2, [1,2,3,4]) = 2
length([1,2,3,4]) = 4
sublist(3, [1,2,3,4]) = [1,2,3,4]
sublist(1,2,[1,2,3,4]) = [1, 2]
first([1,2,3,4]) = 1
last([1,2,3,4]) = 4
contains(2, [1,2,3,4]) = true
函数名 | 函数功能 | 参数 | 返回值 |
---|---|---|---|
md5 | 求 MD5 值 | 数据 | MD5 值 |
sha | 求 SHA 值 | 数据 | SHA 值 |
sha256 | 求 SHA256 值 | 数据 | SHA256 值 |
压缩解压缩函数
函数名 | 函数功能 | 参数 | 返回值 |
---|---|---|---|
gzip | 压缩数据,结果包含 gz 数据头和校验和 | 原始的二进制数据 | 压缩后的二进制数据 |
gunzip | 解压缩数据,原始数据中包含 gz 数据头和校验和 | 压缩后的二进制数据 | 原始的二进制数据 |
zip | 压缩数据,结果不包含 zlib 数据头和校验和 | 原始的二进制数据 | 压缩后的二进制数据 |
unzip | 解压缩数据,原始数据中不包含 zlib 数据头和校验和 | 压缩后的二进制数据 | 原始的二进制数据 |
zip_compress | 压缩数据,结果包含 zlib 数据头和校验和 | 原始的二进制数据 | 压缩后的二进制数据 |
zip_uncompress | 解压缩数据,原始数据中包含 zlib 数据头和校验和 | 压缩后的二进制数据 | 原始的二进制数据 |
bin2hexstr(gzip('hello world')) = '1F8B0800000000000003CB48CDC9C95728CF2FCA49010085114A0D0B000000'
gunzip(hexstr2bin('1F8B0800000000000003CB48CDC9C95728CF2FCA49010085114A0D0B000000')) = 'hello world'
bin2hexstr(zip('hello world')) = 'CB48CDC9C95728CF2FCA490100'
unzip(hexstr2bin('CB48CDC9C95728CF2FCA490100')) = 'hello world'
bin2hexstr(zip_compress('hello world')) = '789CCB48CDC9C95728CF2FCA4901001A0B045D'
比特操作函数
subbits('abc', 8) = 97
subbits('abc', 9, 8) = 98
subbits('abc', 17, 8) = 99
subbits('abc', 9, 16, 'integer', 'signed', 'big') = 25187
subbits('abc', 9, 16, 'integer', 'signed', 'little') = 25442
函数名 | 函数功能 | 参数 | 返回值 |
---|---|---|---|
base64_encode | BASE64 编码 | 要编码的二进制数据 | Base64 编码的字符串 |
base64_decode | BASE64 解码 | Base64 编码的字符串 | 解码后的二进制数据 |
json_encode | JSON 编码 | 要转成 JSON 的数据结构 | JSON 字符串 |
json_decode | JSON 解码 | 要解码的 JSON 字符串 | 解码后的数据结构 |
bin2hexstr | 二进制数据转为 Hex 字符串 | 二进制数据 | Hex 字符串 |
hexstr2bin | Hex 字符串转为二进制数据 | Hex 字符串 | 二进制数据 |
时间与日期函数
Function | Purpose | Parameters | Returned value |
---|---|---|---|
now_timestamp | 返回当前时间的 Unix 秒级时间戳 | - | Unix 时间戳 |
now_timestamp | 指定时间单位,返回当前时间的 Unix 时间戳 | 1. 时间单位 | Unix 时间戳 |
now_rfc3339 | 生成当前时间的 RFC3339 字符串,秒级 | - | RFC3339 时间字符串 |
now_rfc3339 | 指定时间单位,生成当前时间的 RFC3339 字符串 | 1. 时间单位 | RFC3339 时间字符串 |
unix_ts_to_rfc3339 | 将秒级 Unix 时间戳转换为 RFC3339 时间字符串 | 1. Unix 时间戳(秒) | RFC3339 时间字符串 |
unix_ts_to_rfc3339 | 指定时间单位,将 Unix 时间戳转换为 RFC3339 时间字符串 | 1. Unix 时间戳 2. 时间单位 | RFC3339 时间字符串 |
rfc3339_to_unix_ts | 将秒级 RFC3339 时间字符串转换为 Unix 时间戳 | 1. RFC3339 时间字符串 | Unix 时间戳 |
rfc3339_to_unix_ts | 指定时间单位,将 RFC3339 时间字符串转换为 Unix 时间戳 | 1. RFC3339 时间字符串 2. 时间单位 | Unix 时间戳 |
format_date | 时间戳转格式化时间 | 1. 时间戳精度(参考时间戳精度定义) 2. 时间偏移量(参考时间偏移量定义) 3. 日期格式(参考时间字符串编解码格式) 4. 时间戳(可选参数,默认为当前时间) | 格式化时间字符串 |
date_to_unix_ts | 格式化时间转时间戳 | 1. 时间戳精度(参考时间戳精度定义) 2. 时间偏移量(可选,未填写时,使用格式化时间字符串中的时间偏移量,参考时间偏移量定义) 3. 日期格式(参考时间字符串编解码格式) 4. 格式化时间字符串 | Unix 时间戳 |
时间戳精度名称 | 精度 | 示例 |
---|---|---|
second | 秒 | 1653557821 |
millisecond | 毫秒 | 1653557852982 |
microsecond | 微秒 | 1653557892926417 |
nanosecond | 纳秒 | 1653557916474793000 |
格式 | 含义 | 示例 |
---|---|---|
z | UTC Zulu 时间 | 固定值 +00:00 |
UTC Zulu 时间,与 z 相同 | 固定值 +00:00 | |
local | 系统时间 | 自动获取,例如 北京时间 +08:00 Zulu 时间 +00:00 瑞典斯德哥尔摩时间 +02:00 洛杉矶时间 -08:00 |
[+|-]HHMM | %z 格式 | 北京时间 +0800 Zulu 时间 +0000 瑞典斯德哥尔摩时间 +0200 洛杉矶时间 -0800 |
[+|-]HH:MM | %:z 格式 | 北京时间 +08:00 Zulu 时间 +00:00 瑞典斯德哥尔摩时间 +02:00 洛杉矶时间 -08:00 |
[+|-]HH:MM:SS | %::z 格式 | 北京时间 +08:00:00 Zulu 时间 +00:00:00 瑞典斯德哥尔摩时间 +02:00:00 洛杉矶时间 -08:00:00 |
integer() | 时间偏移量秒数 | 北京时间 28800 Zulu 时间 0 瑞典斯德哥尔摩时间 7200 洛杉矶时间 -28800 |
now_timestamp() = 1650874276
now_timestamp('millisecond') = 1650874318331
now_rfc3339() = '2022-04-25T16:08:41+08:00'
now_rfc3339('millisecond') = '2022-04-25T16:10:10.652+08:00'
unix_ts_to_rfc3339(1650874276) = '2022-04-25T16:11:16+08:00'
unix_ts_to_rfc3339(1650874318331, 'millisecond') = '2022-04-25T16:11:58.331+08:00'
rfc3339_to_unix_ts('2022-04-25T16:11:16+08:00') = 1650874276
rfc3339_to_unix_ts('2022-04-25T16:11:58.331+08:00', 'millisecond') = 1650874318331
format_date('second', '+0800', '%Y-%m-%d %H:%M:%S%:z', 1653561612) = '2022-05-26 18:40:12+08:00'
format_date('second', 'local', '%Y-%m-%d %H:%M:%S%:z') = "2022-05-26 18:48:01+08:00"
format_date('second', 0, '%Y-%m-%d %H:%M:%S%:z') = '2022-05-26 10:42:41+00:00'
date_to_unix_ts('second', '%Y-%m-%d %H:%M:%S%:z', '2022-05-26 18:40:12+08:00') = 1653561612
date_to_unix_ts('second', 'local', '%Y-%m-%d %H-%M-%S', '2022-05-26 18:40:12') = 1653561612
date_to_unix_ts('second', '%Y-%m-%d %H-%M-%S', '2022-05-26 10:40:12') = 1653561612