SQL 语句中可用的函数

    数据类型判断函数

    函数名函数作用参数返回值
    is_null判断变量是否为空值DataBoolean 类型的数据。如果为空值(undefined) 则返回 true,否则返回 false
    is_not_null判断变量是否为非空值DataBoolean 类型的数据。如果为空值(undefined) 则返回 false,否则返回 true
    is_str判断变量是否为 String 类型DataBoolean 类型的数据。
    is_bool判断变量是否为 Boolean 类型DataBoolean 类型的数据。
    is_int判断变量是否为 Integer 类型DataBoolean 类型的数据。
    is_float判断变量是否为 Float 类型DataBoolean 类型的数据。
    is_num判断变量是否为数字类型,包括 Integer 和 Float 类型DataBoolean 类型的数据。
    is_map判断变量是否为 Map 类型DataBoolean 类型的数据。
    is_array判断变量是否为 Array 类型DataBoolean 类型的数据。
    1. is_not_null(1) = true
    2. is_str(1) = false
    3. is_str('val') = true
    4. is_bool(true) = true
    5. is_int(1) = true
    6. is_float(1) = false
    7. is_float(1.234) = true
    8. is_num(2.3) = true
    9. is_num('val') = false

    数据类型转换函数

    函数名函数作用参数返回值
    str将数据转换为 String 类型DataString 类型的数据。无法转换将会导致 SQL 匹配失败
    str_utf8将数据转换为 UTF-8 String 类型DataUTF-8 String 类型的数据。无法转换将会导致 SQL 匹配失败
    bool将数据转换为 Boolean 类型DataBoolean 类型的数据。无法转换将会导致 SQL 匹配失败
    int将数据转换为整数类型Data整数类型的数据。无法转换将会导致 SQL 匹配失败
    float将数据转换为浮点型类型Data浮点型类型的数据。无法转换将会导致 SQL 匹配失败
    float2str将浮点型数字以指定精度转换为字符串1. 浮点型数字 2. 精度字符串
    map将数据转换为 Map 类型DataMap 类型的数据。无法转换将会导致 SQL 匹配失败
    1. str_utf8(1234) = '1234'
    2. bool('true') = true
    3. int('1234') = 1234
    4. float('3.14') = 3.14
    5. float2str(20.2, 10) = '20.2'
    6. 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 函数

    1. map_get('a', json_decode( '{ "a" : 1 }' )) = 1
    2. map_get('b', json_decode( '{ "a" : 1 }' ), 2) = 2
    3. 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 值
    1. nth(2, [1,2,3,4]) = 2
    2. length([1,2,3,4]) = 4
    3. sublist(3, [1,2,3,4]) = [1,2,3,4]
    4. sublist(1,2,[1,2,3,4]) = [1, 2]
    5. first([1,2,3,4]) = 1
    6. last([1,2,3,4]) = 4
    7. 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 数据头和校验和压缩后的二进制数据原始的二进制数据
    1. bin2hexstr(gzip('hello world')) = '1F8B0800000000000003CB48CDC9C95728CF2FCA49010085114A0D0B000000'
    2. gunzip(hexstr2bin('1F8B0800000000000003CB48CDC9C95728CF2FCA49010085114A0D0B000000')) = 'hello world'
    3. bin2hexstr(zip('hello world')) = 'CB48CDC9C95728CF2FCA490100'
    4. unzip(hexstr2bin('CB48CDC9C95728CF2FCA490100')) = 'hello world'
    5. bin2hexstr(zip_compress('hello world')) = '789CCB48CDC9C95728CF2FCA4901001A0B045D'

    比特操作函数

    1. subbits('abc', 8) = 97
    2. subbits('abc', 9, 8) = 98
    3. subbits('abc', 17, 8) = 99
    4. subbits('abc', 9, 16, 'integer', 'signed', 'big') = 25187
    5. subbits('abc', 9, 16, 'integer', 'signed', 'little') = 25442
    函数名函数功能参数返回值
    base64_encodeBASE64 编码要编码的二进制数据Base64 编码的字符串
    base64_decodeBASE64 解码Base64 编码的字符串解码后的二进制数据
    json_encodeJSON 编码要转成 JSON 的数据结构JSON 字符串
    json_decodeJSON 解码要解码的 JSON 字符串解码后的数据结构
    bin2hexstr二进制数据转为 Hex 字符串二进制数据Hex 字符串
    hexstr2binHex 字符串转为二进制数据Hex 字符串二进制数据

    时间与日期函数

    FunctionPurposeParametersReturned 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 时间戳
    时间戳精度名称精度示例
    second1653557821
    millisecond毫秒1653557852982
    microsecond微秒1653557892926417
    nanosecond纳秒1653557916474793000
    格式含义示例
    zUTC 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
    1. now_timestamp() = 1650874276
    2. now_timestamp('millisecond') = 1650874318331
    3. now_rfc3339() = '2022-04-25T16:08:41+08:00'
    4. now_rfc3339('millisecond') = '2022-04-25T16:10:10.652+08:00'
    5. unix_ts_to_rfc3339(1650874276) = '2022-04-25T16:11:16+08:00'
    6. unix_ts_to_rfc3339(1650874318331, 'millisecond') = '2022-04-25T16:11:58.331+08:00'
    7. rfc3339_to_unix_ts('2022-04-25T16:11:16+08:00') = 1650874276
    8. rfc3339_to_unix_ts('2022-04-25T16:11:58.331+08:00', 'millisecond') = 1650874318331
    9. format_date('second', '+0800', '%Y-%m-%d %H:%M:%S%:z', 1653561612) = '2022-05-26 18:40:12+08:00'
    10. format_date('second', 'local', '%Y-%m-%d %H:%M:%S%:z') = "2022-05-26 18:48:01+08:00"
    11. format_date('second', 0, '%Y-%m-%d %H:%M:%S%:z') = '2022-05-26 10:42:41+00:00'
    12. date_to_unix_ts('second', '%Y-%m-%d %H:%M:%S%:z', '2022-05-26 18:40:12+08:00') = 1653561612
    13. date_to_unix_ts('second', 'local', '%Y-%m-%d %H-%M-%S', '2022-05-26 18:40:12') = 1653561612
    14. date_to_unix_ts('second', '%Y-%m-%d %H-%M-%S', '2022-05-26 10:40:12') = 1653561612