添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Skip to content
EMQX 文档

内置 SQL 函数

规则引擎提供了各种内置函数,您可以在 SQL 中使用这些函数实现基本的数据处理,包括:

在本章节中,所有函数的声明都遵循以下格式:

例如, abs(X: integer | float) -> integer | float 意味着参数 X 的数据类型可以是 integer 或者 float,并且其返回值的数据类型同样可以是 integer 或 float。

注意,如果传入参数的值超出了限定范围或者使用了不支持的数据类型,将导致当前 SQL 执行失败,并使执行失败计数加 1。

提示

  1. 一些转义字符使用时需要进行反转义,参考 unescape 函数
  2. 从 EMQX 5.0 版本开始,EMQX 还支持使用 jq 语法 处理复杂的 JSON 数据,您可以阅读 jq 函数 部分了解更多信息。

数学运算函数

EMQX 支持广泛的数学函数:

  • 三角函数和双曲函数,包括 sin、cos、tan、asin、acos、atan、sinh、cosh、tanh、asinh、acosh、atanh。
  • 数值函数,包括 abs、ceil、floor、round、sqrt、fmod。
  • 指数和对数函数,包括 exp、power、log、log10、log2。

abs(X: integer | float) -> integer | float

返回数字 X 的绝对值。

示例:

acos(X: integer | float) -> float

返回 X 的反余弦值,以弧度表示。 X 的取值范围为 [-1, 1] 。示例:

acosh(X: integer | float) -> float

返回 X 的反双曲余弦值,以弧度表示。 X 必须大于等于 1。示例:

asin(X: integer | float) -> float

返回 X 的反正弦值,以弧度表示。 X 的取值范围为 [-1, 1] 。示例:

asinh(X: integer | float) -> float

返回 X 的反双曲正弦值。示例:

atan(X: integer | float) -> float

返回 X 的反正切值,以弧度表示。示例:

atanh(X: integer | float) -> float

返回 X 的反双曲正切值, X 的取值范围为 (-1, 1) 。示例:

ceil(X: integer | float) -> integer

向上舍入,返回大于等于给定 X 的最小整数。示例:

cos(X: integer | float) -> float

返回角度 X (以弧度表示)的余弦值。示例:

cosh(X: integer | float) -> float

返回 X 的双曲余弦值。示例:

exp(X: integer | float) -> float

返回自然常数 e 的 X 次方,即 e^X 。示例:

floor(X: integer | float) -> integer

向下舍入,返回小于等于给定 X 的最大整数。示例:

fmod(X: integer | float, Y: integer | float) -> float

以浮点数形式返回 X 除以 Y 的余数。示例:

log(X: integer | float) -> float

返回数字 X 的自然对数, X 必须大于 0。示例:

log10(X: integer | float) -> float

返回数字 X 以 10 为底的对数,, X 必须大于 0。示例:

log2(X: integer | float) -> float

返回数字 X 以 2 为底的对数,, X 必须大于 0。示例:

round(X: integer | float) -> integer

对数字 X 进行四舍五入,返回最接近的整数。示例:

power(X: integer | float, Y: integer | float) -> float

返回基数 X 的指数 Y 次幂,即 X^Y 。示例:

random() -> float

返回一个随机浮点数,范围是 [0, 1) 。示例:

sin(X: integer | float) -> float

返回角度 X (以弧度表示)的正弦值。示例:

sinh(X: integer | float) -> float

返回 X 的双曲正弦值。示例:

sqrt(X: integer | float) -> float

返回数字 X 的平方根。示例:

tan(X: integer | float) -> float

返回角度 X (以弧度表示)的正切值。示例:

tanh(X: integer | float) -> float

返回 X 的双曲正切值。示例:

数据类型判断函数

数据类型判断函数可用于检查指定字段的数据类型,并通过布尔值指示该字段是否符合指定的数据类型。

is_array(Term: any) -> boolean

any 表示所有数据类型。

判断 Term 是否为 array 类型。示例:

is_bool(Term: any) -> boolean

判断 Term 是否为 boolean 类型。示例:

is_float(Term: any) -> boolean

判断 Term 是否为 float 类型。示例:

is_int(Term: any) -> boolean

判断 Term 是否为 integer 类型。示例:

is_map(Term: any) -> boolean

判断 Term 是否为 map 类型。示例:

is_null(Term: any) -> boolean

判断变量 Term 是否未定义。 注意,is_null 函数只能用于判断变量是否未定义,不能用于判断变量是否为 null 。 示例:

is_null_var(Term: any) -> boolean

判断变量 Term 是否未定义,或者是 null 。示例:

is_not_null_var(Term: any) -> boolean

is_null_var 相反,判断变量 Term 是否已定义且不为 null

is_num(Term: any) -> boolean

判断 Term 是否为 integer 或 float 类型。示例:

is_str(Term: any) -> boolean

判断 Term 是否为 string 类型。示例:

数据类型转换函数

bool(Term: boolean | integer | string) -> boolean

Term 转换为 boolean 类型,Term 只能是 boolean 类型、integer 类型的 0 和 1,或者 string 类型的 ture 和 false。

示例:

float(Term: float | integer | string) -> float

Term 转换为 float 类型。

Term 为 string 类型时,可以使用科学计数法,例如 float('3.14e4') 。float 类型最多支持 16 位有效数字,如果字符串 Term 表示的浮点数的有效数字超过了 16 位时,转换可能出现舍入误差。

示例:

float(Term: float | integer | string, Decimals: integer) -> float

将 Term 转换成小数点后最多包含 Decimals 位数字的浮点数,Decimals 的取值范围为 (0, 253] 。其余行为与 float/1 相同。示例:

float2str(Float: float, Decimals: integer) -> string

将浮点数 Float 转换为小数点后最多包含 Decimals 位数字的字符串,字符串末尾的 0 将被截断。 Decimals 的取值范围为 [0, 253] 。如果 Float 的有效数字超过了 16 位,那么转换将可能出现舍入误差。

由于浮点数在计算机中无法精确存储,所以当 Decimals 大于 Float 的小数位数(包括前导零)时, float2str 可能返回 Float 的二进制近似值的十进制形式。

示例:

int(Term: boolean | float | integer | string) -> integer

Term 转换为 integer 类型。

Term 为 boolean 类型时,ture 将被转换为数字 1,false 将被转换为数字 0。

Term 为 float 类型时, Term 将被向下舍入,转换为小于等于 Term 的最大整数。

Term 为 string 类型时, Term 必须至少包含一个数字字符,可以具有单个 + - 字符组成的可选前缀,前导零将被忽略。支持使用数学计数法表示。

Term 为 integer 类型时, Term 将原样返回。

示例:

str(Term: any) -> string

将任意类型的 Term 转换为 string 类型。

Term 为 map 或 array 类型时,str 函数将尝试对 Term 进行 JSON 编码。

Term 为 float 类型时,str 函数将返回对应的字符串,字符串末尾的 0 将被截断。返回的字符串在小数点后最多包含 10 位数字,如果想要返回更多小数位,请使用 float2str 函数。

示例:

字符串操作函数

字符串函数可用于对字符串的大小写转换、空格删除、子串截取、转义/反转义、替换等处理。

ascii(Char: string) -> integer

返回字符 Char 对应的 ASCII 编号,如果 Char 包含多个字符,仅返回第一个字符的对应编号。示例:

concat(Str1: string, Str2: string) -> string

将 Str1 和 Str2 合并为一个字符串。示例:

find(String: string, SearchPattern: string) -> string

在 String 中查找子串 SearchPattern,删除 String 中 SearchPattern 之前的所有内容,并返回字符串中的其余部分。如果未找到 SearchPattern,则返回一个空字符串。同 find(String, SearchPattern, 'leading')

示例:

find(String: string, SearchPattern: string, Direction: string) -> string

find/2 ,但可以使用 Direction 指定查找子串 SearchPattern 的方向。示例:

join_to_string(Sep: string, Array: array) -> string

将数组 Array 中的所有元素连接成一个字符串,元素之间使用 Sep 分隔。示例:

lower(String: string) -> string

将字符串 String 中的大写字母转换为小写字母。示例:

ltrim(String: string) -> string

trim/1 ,但仅删除字符串 String 中前导的空白字符。示例:

pad(String: string, Length: integer) -> string

为 String 填充尾随空格,使其达到指定长度 Length。示例:

pad(String: string, Length: integer, Direction: string) -> string

pad/2 ,但可以使用 Direction 指定空格填充的方向。leading 表示填充前导空格,trailing 表示填充尾随空格,both 表示同时填充前导和尾随空格。

指定 Direction 为 both 时,如果需要填充的空格数量为奇数,那么最后一个空格将被填充在尾部。

示例:

pad(String: string, Length: integer, Direction: string, Char: string) -> string

pad/3 ,但可以使用指定字素簇 Char 进行填充。

由于规则引擎不检查 Char 是否是一个合法的字素簇,所以 Char 无论包含了多少字符,都会按一个字符长度处理。示例:

regex_match(String: string, Expression: string) -> boolean

判断字符串 String 是否与正则表示式 Expression 匹配。示例:

regex_replace(String: string, Expression: string, Replacement: string) -> string

使用字符串 Replacement 替换 String 中与正则表达式 Expression 匹配的部分。如果未找到匹配部分,则返回原始的 String。示例:

regex_extract(String: string, Expression: string) -> [string]

TIP

此函数在 EMQX v5.7.1 中引入。

这个函数在给定字符串中进行非全局搜索,查找带有捕获组的正则表达式模式。 它可以用来根据正则表达式提取字符串的部分内容,排除完整匹配本身。

如果找到匹配项,它将返回这些匹配项中所有捕获组的列表。如果没有找到匹配项或没有捕获到任何组,则返回一个空列表。

示例:

replace(String: string, SearchPattern: string, Replacement: string) -> string

将 String 中的所有 SearchPattern 都替换为 Replacement。示例:

replace(String: string, SearchPattern: string, Replacement: string, Where: string) -> string

将出现在 String 中的 SearchPattern 替换为 Replacement。

Where 有以下可取值:

  • all:替换所有的 SearchPattern,等同于 replace/3
  • leading:仅替换前导 SearchPattern。
  • trailing:仅替换尾随 SearchPattern。

示例:

reverse(String: string) -> string

反转字符串 String。示例:

rm_prefix(String: string, Prefix: string) -> string

从字符串 String 中删除前缀 Prefix。示例:

rtrim(String: string) -> string

trim/1 ,但仅删除字符串 String 中尾随的空白字符。示例:

split(String: string, Separator: string) -> array

使用分隔符 Separator 将字符串 String 分割成子字符串并返回一个由这些子字符串组成的数组。

两个或多个相邻的 Separator 不会被视为一个,所以分割结果中可能包含空字符串。 split/2 默认对输出结果进行了修整,过滤了其中空字符串,如需保留,请使用 split(String, Separator, 'notrim')

Separator 可以由多个字符组成,但它们将被视为一个整体。如果想要一次指定多个分隔字符,请使用 tokens 函数。

示例:

split(String: string, Separator: string, Option: string) -> array

split/2 ,但可以使用 Option 指定需要处理的分隔符的位置,以及是否需要返回空字符串。

Option 有以下可取值:

  • notrim:处理字符串中的所有分隔符,返回的结果中可能包含空字符串。
  • leading:仅处理前导的分隔符,返回的结果中不包含空字符串。
  • leading_notrim:仅处理前导的分隔符,返回的结果中可能包含空字符串。
  • trailing:仅处理尾随的分隔符,返回的结果中不包含空字符串。
  • trailing_notrim:仅处理尾随的分隔符,返回的结果中可能包含空字符串。

示例:

sprintf(Format, ...) -> string

返回一个按照 Format 格式化的字符串。Format 字符串包含普通字符以及用于格式化的控制序列。

控制序列的格式一般为: ~F.P.PadModC

字符 C 确定要使用的控制序列的类型。这是唯一必填字段。 F、P、Pad 和 Mod 都是可选的。关于它们的详细介绍,请参阅: https://www.erlang.org/doc/man/io.html#fwrite-1。

示例:

strlen(String: string) -> integer

返回字符串 String 的长度。示例:

substr(String: string, Start: integer) -> string

返回 String 中从位置 Start 开始到字符串末尾的所有字符,字符串的下标从 0 开始,即位置 0 对应的是字符串 “hello” 中的 “h”。示例:

substr(String: string, Start: integer, Length: integer) -> string

返回 String 中从位置 Start 开始,最大长度为 Length 的子字符串,字符串的下标从 0 开始。示例:

tokens(String: string, SeparatorList: string) -> array

返回 String 被 SeparatorList 中的字符分割后的子串列表。

两个或多个相邻的分隔符将被视为一个,所以不会出现空字符串。

示例:

tokens(String: string, SeparatorList:string, NoCRLF: string) -> array

tokens/2 ,但可以指定 NoCRLF 为 nocrlf 表示同时分割回车符和换行符。示例:

trim(String: string) -> string

删除字符串 String 中前导和尾随的应被视为空白的字符,例如空格、制表符、换页符及换行符。注意,在 Unicode 标准中 \r\n 被视为一个字素簇,所以 \r\n 会被一并被删除。示例:

unescape(String: string) -> string

反转义函数,用于将转义字符转换回它们表示的字符。当 SQL 中使用了转义字符时,需要首先使用该函数进行反转义才能正确使用。

TIP

此函数在 EMQX v5.7.0 中引入。

例如当 Payload 为换行字符串:

需要按照 \n 分割 Payload 为数组,如下 SQL 将无法按预期执行:

输出结果:

使用 unescape 函数对 \n 反转义后,可以得到期望的结果:

输出结果:

unescape 函数支持以下转义字符:

标准 C 转义序列:

  • \n 表示换行符(LF)
  • \t 表示水平制表符(HT)
  • \r 表示回车符(CR)
  • \b 表示退格符(BS)
  • \f 表示换页符(FF)
  • \v 表示垂直制表符(VT)
  • \' 表示单引号(')
  • \" 表示双引号(")
  • \\ 表示反斜杠
  • \? 表示问号(?)
  • \a 表示警告符(响铃符,BEL)

十六进制转义码:

  • \xH... 其中 H... 是一个或多个十六进制数字(0-9, A-F, a-f),允许编码任意的 UTF-32 字符。

如果传入未识别的转义符,或者十六进制转义码包含无效的 Unicode 字符,则该函数将抛出异常。

upper(String: string) -> string

将字符串 String 中的小写字母转换为大写字母。示例:

映射操作函数

map_get(Key: string, Map: map) -> any

返回 Map 中指定 Key 的值,如果该 Key 在 Map 中不存在,则返回 undefined 。示例:

map_get(Key: srting, Map: map, Default: any) -> any

map_get/2 ,但 Key 不存在时,将返回指定的 Default。示例:

map_keys(Map: map) -> array

返回 Map 中所有的 Key。示例:

map_put(Key: string, Value: any, Map: map) -> map

将 Key 与关联的 Value 插入到 Map 中,返回更新后的 Map。如果原始 Map 中该 Key 已经存在,那么旧的关联值将被替换为新的 Value。示例:

map_to_redis_hset_args(Map) -> list

TIP

此函数在 EMQX v5.7.1 中引入。

此函数将映射转换为字段名称和值的列表,用于格式化 Redis 的 HSET (或 HMSET )命令。 转换规则如 SELECT map_to_redis_hset_args(payload.value) as hset_fields FROM t/1 , 这样可以准备好 hset_fields 变量,以便集成到 Redis 动作命令模板中,格式为 HMSET name1 ${hset_fields} 。 例如,如果 payload.value 是映射 {"a" : 1, "b": 2} ,则生成的命令可能为 HMSET name1 b 2 a 1 。 请注意,映射中的字段顺序是不确定的。

map_to_entries(Map: map) -> array

将 Map 转换为包含 key , value 字段的对象数组。示例:

map_values(Map: map) -> array

返回 Map 中所有的 Value。示例:

mget(Key: string | array, Map: map) -> any

返回 Map 中指定 Key 的值,如果该 Key 在 Map 中不存在,则返回 undefined。可以使用数组一次指定多个 Key 以便从嵌套的 Map 中获取关联的值。示例:

mput(Key: string | array, Value: any, Map: map) -> map

将 Key 与关联的 Value 插入到 Map 中,返回更新后的 Map。如果原始 Map 中该 Key 已经存在,那么旧的关联值将被替换为新的 Value。可以使用数组一次指定多个 Key 以便向嵌套的 Map 插入数据。示例:

数组操作函数

contains(Item: any, Array: array) -> boolean

判断数组 Array 是否包含指定的 Item。示例:

first(Array: array) -> any

返回数组 Array 中的第一个元素。Array 不可为空。示例:

last(Array: array) -> any

返回数组 Array 中的最后一个元素。Array 不可为空。示例:

length(Array: array) -> integer

返回数组 Array 的长度,即 Array 中元素的个数。示例:

nth(N: integer, Array: array) -> any

返回数组 Array 中的第 N 个元素。N 不应大于 Array 长度。示例:

sublist(Length: integer, Array: array) -> any

返回从数组 Array 中第 1 个元素开始,最大长度为 Length 的子数组。如果 Length 大于 Array 长度,将返回整个数组。示例:

sublist(Start: integer, Length: integer, Array:array) -> any

sublist/2 ,但可以使用 Start 指定从第几个元素开始返回。如果 Start + Length 大于 Array 长度,那么将返回整个数组。示例:

哈希函数

md5(String: string) -> string

为任意长度字符串 String 计算长度固定为 128 位的 MD5 散列值。该散列值将以 32 个十六进制数字组成的文本形式返回。返回字符串中的字母固定为小写形式(a ~ f)。

示例:

sha(String: string) -> string

使用 SHA-1 算法为任意长度字符串 String 计算长度固定为 160 位的 SHA 散列值。该散列值将以 40 个十六进制数字组成的文本形式返回。返回字符串中的字母固定为小写形式(a ~ f)。

示例:

sha256(String: string) -> string

使用 SHA-2 算法为任意长度字符串 String 计算长度固定为 256 位的 SHA 散列值。该散列值将以 64 个十六进制数字组成的文本形式返回。返回字符串中的字母固定为小写形式(a ~ f)。

示例:

压缩与解压缩函数

注意:二进制数据无法直接进行 JSON 编码,必须调用 bin2hexstr 函数将其转换成对应的由十六进制数字组成的字符串。

gunzip(Data: binary) -> binary | string

解压 Data,Data 必须包含 gz 头部和位于尾部的校验和 。示例:

gzip(Data: binary | string) -> binary

使用 DEFLATE 算法压缩 Data,返回的压缩结果中 包含 gz 头部和位于尾部的校验和 。示例:

unzip(Data: binary) -> binary | string

解压 Data,Data 中 不应包含 zlib 头部和位于尾部的校验和 。示例:

zip(Data: binary | string) -> binary

使用 DEFLATE 算法压缩 Data,返回的压缩结果中 不包含 zlib 头部和位于尾部的校验和 。示例:

zip_compress(Data: binary | string) -> binary

使用 DEFLATE 算法压缩 Data,返回的压缩结果中 包含 zlib 头部和位于尾部的验和 。示例:

zip_uncompress(Data: binary) -> binary | string

解压 Data,Data 必须包含 zlib 头部和位于尾部的校验和 。示例:

比特位操作函数

bitand(Num1: integer, Num2: integer) -> integer

返回 Num1 和 Num2 的 按位与 结果,输入输出均为有符号整型。示例:

bitnot(Num: integer) -> integer

返回 Num 的 按位取反 结果,输入输出均为有符号整型。示例:

bitsl(Num: integer, Shift: integer) -> integer

将 Num 按位左移 Shift 位,右侧空白由 0 填充。示例:

bitsr(Num: integer, Shift: integer) -> integer

将 Num 按位右移 Shift 位,左侧空白填充符号位(即正数补 0,负数补 1)。示例:

bitor(Num1: integer, Num2: integer) -> integer

返回 Num1 和 Num2 的 按位或 结果。示例:

bitxor(Num1: integer, Num2: integer) -> integer

返回 Num1 和 Num2 的 按位异或 结果。示例:

位序列操作函数

规则引擎提供了一些用于操作位序列的函数。例如 subbits 用于提取位序列并将其转换为指定的数据类型。

TIP

binary 类型表示一个字节序列,每个字节由 8 个比特位组成,所以任意一个 binary 中的比特位一定是 8 的整数倍。bitstring 类型表示一个位序列,它可以由任意数量的比特位组成。

简单地说,每个 binary 都是 bitstring,但反过来则不一定。

需要注意的是,长度不是 8 的整数倍的 bitstring 不能直接序列化为 JSON 字符串这样的外部格式。它通常作为中间值存在,然后被转换为整数或其他合适的类型使用。

bitsize(Bin: binary) -> integer

返回位序列 Bin 的比特位数。示例:

byteszie(Bin: binary) -> integer

返回字节序列 Bin 的字节数。示例:

subbits(Bin: binary, BitNum: integer) -> integer

从字节序列 Bin 的起始位置开始,获取长度为 BitNum 的比特位,按照大端序列将其转换为无符号整型。等同于 subbits(Bytes, 1, BitNum, 'integer', 'unsigned', 'big')

示例:

subbits(Bin: binary, Start: integer, BitNum: integer) -> integer

从字节序列 Bin 的位置 Start 开始(起始位置为 1),获取长度为 BitNum 的比特位,按照大端序列将其转换为无符号整型。等同于 subbits(Bytes, Start, BitNum, 'integer', 'unsigned', 'big')

示例:

subbits(Bin: binary, Start: integer, BitNum: integer, OutputType: string, Signedness: string, Endianness: string) -> bitstring | integer | float

从字节序列 Bin 的位置 Start 开始(起始位置为 1),获取长度为 BitNum 的比特位,按照要求的字节顺序 Endianness 和符号性 Signedness 将其转换为 OutputType 类型的数据。

OutputType 的可取值有:

  • bits:bitstring 的缩写
  • integer
  • float

Signedness 的可取值有:

  • signed
  • unsigned

Endianness 的可取值有:

  • big
  • little

注意,OutputType 为 float 时,参数 Signedness 不生效,OutputType 为 bits 时,参数 Signedness 和 Endianness 不生效。

示例:

编解码函数

base64_decode(Data: string) -> bytes | string

对 Data 进行 Base64 解码。

base64_encode(Data: binary | string) -> string

对 Data 进行 Base64 编码。示例:

json_decode(Data: string) -> array | map

对 Data 进行 JSON 解码。示例:

json_encode(Data: array | map) -> string

对 Data 进行 JSON 编码。示例:

bin2hexstr(Data: binary) -> string

将二进制数据转换为对应的由十六进制数字组成的字符串。示例:

hexstr2bin(Data: string) -> binary

将由十六进制数字组成的字符串转换为对应的二进制数据。示例:

Schema Registry

在 EMQX 企业版中, schema registry 提供了 schema_decode schema_encode 功能,可以为 Protobuf (Protocol Buffers) Avro 格式的数据进行编解码。 关于功能详情,请见 编解码

schema_encode(SchemaID: string, Data: map) -> binary

使用指定的 Avro Schema 对 Data 进行编码。在 Schema Registry 中创建 Schema 以获取 ID。

schema_encode(SchemaID: string, Data: map, MsgType: string) -> binary

使用指定的 Protobuf Schema 对 Data 进行编码。在 Schema Registry 中创建 Schema 以获取 ID。MsgType 用于指定 Data 在 Protobuf Schema 中对应的消息类型。

schema_decode(SchemaID: string, Bin: binary) -> map

使用指定的 Avro Schema 对 Bin 进行解码。在 Schema Registry 中创建 Schema 以获取 ID。

schema_decode(SchemaID: string, Bin: binary, MsgType: string) -> map

使用指定的 Protobuf Schema 对 Bin 进行解码。在 Schema Registry 中创建 Schema 以获取 ID。MsgType 用于指定 Data 在 Protobuf Schema 中对应的消息类型。

Sparkplug B

EMQX 企业版还有专门用于解码和编码 Sparkplug B 消息的特殊用途函数( sparkplug_decode sparkplug_encode )。您可以在 Sparkplug B 中了解有关 Sparkplug 函数的更多信息。

日期与时间函数

date_to_unix_ts(Unit: string, FormatString: string, DateTimeString: string) -> integer

按照格式字符串 FormatString 解析日期时间字符串 DateTimeString,将其转换为时间单位为 Unit 的 Unix 时间。

second , millisecond , microsecond nanosecond 为可以使用的 Unit。

FormatString 中可以使用的占位符如下:

占位符 含义 取值范围
%Y 由四位数字表示的年份 0000 - 9999
%m 由两位数字表示的月份 01 - 12
%d 由两位数字表示的月中的日期 01 - 31
%H 由两位数字表示的小时,采用 24 小时制 00 - 24
%M 由两位数字表示的分钟 00 - 59
%S 由两位数字表示的秒钟 00 - 59
%N 纳秒 000000000 - 999999999
%6N 微秒,即取纳秒的前六位数字 000000 - 999999
%3N 毫秒,即取纳秒的前三位数字 000 - 999
%z 时区偏移量,格式为 ±hhmm -1159 - +1159
%:z 时区偏移量,格式为 ±hh:mm -11:59 - +11:59
%::z 时区偏移量,格式为 ±hh:mm:ss -11:59:59 - +11:59:59

示例:

date_to_unix_ts(Unit: string, Offset: string | integer, FormatString: string, DateTimeString: string) -> integer

如果 DateTimeString 中未包含时区偏移量,则可以使用 Offset 手动指定该偏移量,其他行为同 date_to_unix_ts/3 。Offset 可以是字符串,也可以是直接以整型表示的秒数。

当 Offset 为字符串时,可以使用以下格式:

  • Z z ,表示 UTC 偏移量 00:00。
  • ±hh[:mm][:ss] ±hh[mm][ss] ,相对 UTC 的正负时间偏移量。
  • local ,表示系统本地时区对应的偏移量。

示例:

format_date(Unit: string, Offset: string | integer, FormatString: string, Time: Integer) -> string

将 Unix 时间转换为指定格式的日期时间字符串。Unit 表示待转换 Unix 时间 Time 的时间单位,Offset 表示输出的日期时间中的时区偏移量,FormatString 则表示输出的日期时间格式。

Unit,Offset 和 FormatString 的可取值参见 date_to_unix_ts/3, 4

示例:

now_rfc3339() -> string

以 RFC3339 日期时间字符串形式返回当前系统时间,时间单位为秒。示例:

now_rfc3339(Unit: string) -> string

now_rfc3339/0 ,但可以使用 Unit 指定时间单位,支持 second , millisecond , microsecond nanosecond 。示例:

now_timestamp() -> integer

以 Unix 时间戳形式返回当前系统时间,时间单位为秒。示例:

now_timestamp(Unit: string) -> integer

now_timestamp/0 ,但可以使用 Unit 指定时间单位,支持 second , millisecond , microsecond nanosecond 。示例:

rfc3339_to_unix_ts(DateTimeString: string) -> integer

将符合 RFC3339 标准的日期时间字符串转换为 Unix 时间戳。 2024-02-23T15:56:30Z 就是一个典型的 RFC3339 日期时间字符串,它表示 UTC 时间 2024 年 2 月 23 日,15 点 56 分 30 秒。

示例:

rfc3339_to_unix_ts(DateTimeString: string, Unit: string) -> integer

rfc3339_to_unix_ts/1 ,但可以使用 Unit 指定返回的 Unix 时间戳单位,支持 second , millisecond , microsecond nanosecond 。示例:

timezone_to_offset_seconds(Offset: string) -> integer

将字符串形式的时区偏移量转换为以整型表示的秒数。以下是支持的时间偏移量表示形式:

  • Z z ,表示 UTC 偏移量 00:00。
  • ±hh[:mm][:ss] ±hh[mm][ss] ,相对 UTC 的正负时间偏移量。
  • local ,表示系统本地时区对应的偏移量。

示例: