Skip to content

数据转发

RealMQ基于消息流与设备事件,通过资源、规则和动作清晰、灵活、简洁的配置即可与用户的业务快速集成,提升用户易用性,降低业务系统与RealMQ的耦合度。

image-20240624121059980

支持的数据转发列表

关系数据库时序数据库消息队列WebServerNoSQL
MySQLTDengineKafkaWebHookRedis
PostgreSQLRocketMQ

数据流转的语法和例子

  • 事件、主题 选择触发事件或者主题
  • 筛选字段 对数据进行变换,并选择出感兴趣的字段
  • 条件 筛选出来的某个字段施加条件过滤

事件列表

事件列表说明
消息发布客户端消息发布
消息发布前客户端消息发布前
连接客户端连接成功
连接断开客户端断开连接成功
消息投递消息投递给订阅者
消息投递丢弃消息投递给订阅者时丢弃
消息应答订阅者接收到消息的应答
消息丢弃客户端发布消息时丢弃
订阅客户端订阅主题
取消订阅客户端取消订阅主题
鉴权结果客户端访问控制鉴权

运算符号和比较符号

函数名函数作用返回值
+加法,或字符串拼接加和,或拼接之后的字符串
-减法差值
*乘法乘积
/除法商值
div整数除法整数商值
mod取模
=比较两者是否完全相等。可用于比较变量和主题true/false
=~比较主题(topic)是否能够匹配到主题过滤器(topic filter)。只能用于主题匹配true/false
>大于true/false
<小于true/false
<=小于等于true/false
>=大于等于true/false
<>不等于true/false
!=不等于true/false

数据流转中可用的字段

消息发布

字段解释
idMQTT 消息 ID
clientid消息来源 Client ID
username消息来源用户名
payloadMQTT 消息体
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
flagsMQTT 消息的 Flags
headersMQTT 消息内部与流程处理相关的额外数据
pub_propsPUBLISH Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
publish_received_atPUBLISH 消息到达 Broker 的时间 (ms)
node事件触发所在节点

客户端连接成功

当客户端连接成功时触发规则

字段解释
clientid消息目的 Client ID
username消息目的用户名
mountpoint主题挂载点(主题前缀)
peername终端的 IPAddress 和 Port
sockname监听的 IPAddress 和 Port
proto_name协议名字
proto_ver协议版本
keepaliveMQTT 保活间隔
clean_startMQTT clean_start
expiry_intervalMQTT Session 过期时间
is_bridge是否为 MQTT bridge 连接
connected_at终端连接完成时间 (ms)
conn_propsCONNECT Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
node事件触发所在节点

客户端连接断开

当客户端连接断开时触发规则

字段解释
reason终端连接断开原因: normal:客户端主动断开 kicked:服务端踢出,通过 REST API keepalive_timeout: keepalive 超时 not_authorized: 认证失败,或者 acl_nomatch = disconnect 时没有权限的 Pub/Sub 会主动断开客户端 tcp_closed: 对端关闭了网络连接 discarded: 因为相同 ClientID 的客户端上线且设置 clean_start = true takeovered: 因为相同 ClientID 的客户端上线且设置 clean_start = false internal_error: 畸形报文或其他未知错误
clientid消息目的 Client ID
username消息目的用户名
peername终端的 IPAddress 和 Port
sockname监听的 IPAddress 和 Port
disconnected_at终端连接断开时间 (ms)
disconn_propsDISCONNECT Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
node事件触发所在节点

消息投递

当消息被放入底层socket时触发规则

字段解释
idMQTT 消息 ID
from_clientid消息来源 Client ID
from_username消息来源用户名
clientid消息目的 Client ID
username消息目的用户名
payloadMQTT 消息体
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
flagsMQTT 消息的 Flags
pub_propsPUBLISH Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
publish_received_atPUBLISH 消息到达 Broker 的时间 (ms)
node事件触发所在节点

消息确认

当消息发送到客户端,并收到客户端回复的ack时触发规则,仅QOS1,QOS2会触发

字段解释
idMQTT 消息 ID
from_clientid消息来源 Client ID
from_username消息来源用户名
clientid消息目的 Client ID
username消息目的用户名
payloadMQTT 消息体
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
flagsMQTT 消息的 Flags
pub_propsPUBLISH Properties (仅适用于 MQTT 5.0)
puback_propsPUBACK Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
publish_received_atPUBLISH 消息到达 Broker 的时间 (ms)
node事件触发所在节点

消息在转发的过程中被丢弃

当一条消息被丢弃时触发规则

字段解释
idMQTT 消息 ID
reason消息丢弃原因,可能的原因: no_subscribers: 没有订阅者 receive_maximum_exceeded: awaiting_rel 队列已满 packet_identifier_inuse: 消息 ID 已被使用
clientid消息来源 Client ID
username消息来源用户名
payloadMQTT 消息体
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
flagsMQTT 消息的 Flags
pub_propsPUBLISH Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
publish_received_atPUBLISH 消息到达 Broker 的时间 (ms)
node事件触发所在节点

消息在投递的过程中被丢弃

当订阅者的消息队列已满时触发规则

字段解释
idMQTT 消息 ID
reason消息丢弃原因,可能的原因: queue_full: 消息队列已满(QoS>0) no_local: 不允许客户端接收自己发布的消息 expired: 消息或者会话过期 qos0_msg: QoS0 的消息因为消息队列已满被丢弃
from_clientid消息来源 Client ID
from_username消息来源用户名
clientid消息目的 Client ID
username消息目的用户名
payloadMQTT 消息体
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
flagsMQTT 消息的 Flags
pub_propsPUBLISH Properties (仅适用于 MQTT 5.0)
timestamp事件触发时间 (ms)
publish_received_atPUBLISH 消息到达 Broker 的时间 (ms)
node事件触发所在节点

鉴权结果

当客户端鉴权结束时触发规则

字段解释
clientid消息目的 Client ID
username消息目的用户名
peerhost客户端的 IPAddress
topicMQTT 主题
actionpublish or subscribe, 发布或者订阅事件
resultallow or deny,鉴权结果
is_cachetrue or false,鉴权时数据的来源 is_cache为true时,鉴权数据来源于cache is_cache为false时,鉴权数据来源于插件
timestamp事件触发时间 (ms)
node事件触发所在节点

客户端订阅成功

当终端订阅成功时触发规则

字段解释
clientid消息目的 Client ID
username消息目的用户名
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
sub_propsSUBSCRIBE Properties (仅适用于 5.0)
timestamp事件触发时间 (ms)
node事件触发所在节点

取消客户端订阅

当取消终端订阅成功时触发规则

字段解释
clientid消息目的 Client ID
username消息目的用户名
peerhost客户端的 IPAddress
topicMQTT 主题
qosMQTT 消息的 QoS
unsub_propsUNSUBSCRIBE Properties (仅适用于 5.0)
timestamp事件触发时间 (ms)
node事件触发所在节点

示例

可用的函数

数据类型判断函数
函数名函数作用参数返回值
is_null判断变量是否为空值。注意:此函数无法判断 JSON 的 null 类型,请使用 is_null_var 替代DataBoolean 类型的数据。如果为空值(undefined) 则返回 true,否则返回 false
is_not_null判断变量是否为非空值。注意:此函数无法判断 JSON 的 null 类型,请使用 is_null_var 替代DataBoolean 类型的数据。如果为空值(undefined) 则返回 false,否则返回 true
is_null_var判断变量是否为空值DataBoolean 类型的数据。如果为空值(undefined) 则返回 true,否则返回 false
is_not_null_var判断变量是否为非空值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 类型的数据。
is_null(undefined_var) = true
is_null(mget('a', json_decode('{"a": null}'))) = false
is_not_null(1) = true
is_not_null(mget('a', json_decode('{"a": null}'))) = true

is_null_var(undefined_var) = true
is_null_var(mget('a', json_decode('{"a": null}'))) = true
is_not_null_var(1) = true
is_not_null_var(mget('a', json_decode('{"a": null}'))) = false

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 类型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 匹配失败
str(1234) = '1234'
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'

注意浮点型转换为字符串的时候,输出结果会受到精度的影响,详情见:https://floating-point-gui.de/

字符串函数
函数名函数作用参数返回值
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'查抄到的子串,如找不到则返回空字符串
join_to_string拼接数组元素为字符串1. 数组拼接后的字符串,拼接符为逗号加空格 (, )
join_to_string拼接数组元素为字符串1. 拼接符 2. 数组拼接后的字符串
join_to_sql_values_string拼接数组元素为字符串,如果元素格式为字符串,将使用单引号包裹。此函数的字符串可以用作拼接 SQL 语句的 VALUES 子句1. 数组拼接后的字符串,拼接符为逗号加空格 (, )
lower('AbC') = 'abc'
lower('abc') = 'abc'

upper('AbC') = 'ABC'` `lower('ABC') = 'ABC'

trim(' hello  ') = 'hello'

ltrim(' hello  ') = 'hello  '

rtrim(' hello  ') = ' hello'

reverse('hello') = 'olleh'

strlen('hello') = 5

substr('abcdef', 2) = 'cdef'
substr('abcdef', 2, 3) = 'cde'

split('a/b/ c', '/') = ['a', 'b', ' c']
split('a/b/ c', '/', 'leading') = ['a', 'b/ c']
split('a/b/ c', '/', 'trailing') = ['a/b', ' c']

concat('a', '/bc') = 'a/bc'
'a' + '/bc' = 'a/bc'

tokens(' a/b/ c', '/') = [' a', 'b', ' c']
tokens(' a/b/ c', '/ ') = ['a', 'b', 'c']
tokens(' a/b/ c\n', '/ ') = ['a', 'b', 'c\n']
tokens(' a/b/ c\n', '/ ', 'nocrlf') = ['a', 'b', 'c']
tokens(' a/b/ c\r\n', '/ ', 'nocrlf') = ['a', 'b', 'c']

sprintf('hello, ~s!', 'steve') = 'hello, steve!'
sprintf('count: ~p~n', 100) = 'count: 100\n'

pad('abc', 5) = 'abc  '
pad('abc', 5, 'trailing') = 'abc  '
pad('abc', 5, 'both') = ' abc '
pad('abc', 5, 'leading') = '  abc'
pad('abc', 5, 'trailing', '*') = 'abc**'
pad('abc', 5, 'trailing', '*#') = 'abc*#*#'
pad('abc', 5, 'both', '*') = '*abc*'
pad('abc', 5, 'both', '*#') = '*#abc*#'
pad('abc', 5, 'leading', '*') = '**abc'
pad('abc', 5, 'leading', '*#') = '*#*#abc'

replace('ababef', 'ab', 'cd') = 'cdcdef'
replace('ababef', 'ab', 'cd', 'all') = 'cdcdef'
replace('ababef', 'ab', 'cd', 'trailing') = 'abcdef'
replace('ababef', 'ab', 'cd', 'leading') = 'cdabef'

regex_match('abc123', '[a-zA-Z1-9]*') = true

regex_replace('ab1cd3ef', '[1-9]', '[&]') = 'ab[1]cd[3]ef'
regex_replace('ccefacef', 'c+', ':') = ':efa:ef'

ascii('a') = 97

find('eeabcabcee', 'abc') = 'abcabcee'
find('eeabcabcee', 'abc', 'leading') = 'abcabcee'
find('eeabcabcee', 'abc', 'trailing') = 'abcee'

join_to_string(['a', 'b', 'c']) = 'a, b, c'
join_to_string('-', ['a', 'b', 'c']) = 'a-b-c'
join_to_sql_values_string(['a', 'b', 1]) = '\'a\', \'b\', 1'
Map 函数
函数名函数作用参数返回值
map_new构建一个空的 Map 类型数据空的 Map 类型 (Erlang Map 类型:#{},对应 JSON 中的对象类型 {})
map_get取 Map 中某个 Key 的值,如果没有则返回空值1. Key 2. MapMap 中某个 Key 的值。支持嵌套的 Key,比如 "a.b.c"
map_get取 Map 中某个 Key 的值,如果没有则返回指定默认值1. Key 2. Map 3. Default ValueMap 中某个 Key 的值。支持嵌套的 Key,比如 "a.b.c"
map_put向 Map 中插入值1. Key 2. Value 3. Map插入后的 Map。支持嵌套的 Key,比如 "a.b.c"
mget取 Map 中某个 Key 的值,如果没有则返回空值。作用与 map_get 相同,但不支持嵌套的 Key1. Key 2. MapMap 中某个 Key 的值
mget取 Map 中某个 Key 的值,如果没有则返回指定默认值。作用与 map_get 相同,但不支持嵌套的 Key1. Key 2. Map 3. Default ValueMap 中某个 Key 的值
mput向 Map 中插入值。作用与 map_put 相同,但不支持嵌套的 Key1. Key 2. Value 3. Map插入后的 Map
map_keys获取 Map 类型数据的所有键Map包含所有键的数组
map_values获取 Map 类型数据的所有值Map包含所有值的数组
map_to_entries将 Map 转换为 Key-Value 键值对数组Map[#{key => Key}, #{value => Value}] 格式的数组,对应的 JSON 类型为 [{"key": Key}, {"value": Value}]
map_new() = #{}
json_encode(map_new()) = '{}'
map_get('a', json_decode( '{ "a" : 1 }' )) = 1
map_get('b', json_decode( '{ "a" : 1 }' ), 2) = 2
map_get('a.b', json_decode( '{ "a" : {"b": 2} }' )) = 2
map_put('c', 1, map_new()) = #{c => 1}
map_put('c.d', 1, map_new()) = #{c => #{d => 1}}
json_encode(map_put('c.d', 1, map_new())) = '{"c":{"d":1}}'
mget('a.b', json_decode( '{ "a.b" : 1 }' )) = 1
mget('a.b', json_decode( '{ "a" : {"b": 2} }' )) = undefined
mput('c.d', 1, map_new()) = #{<<"c.d">> => 1}
json_encode(mput('c.d', 1, map_new())) = '{"c.d":1}'
json_encode(map_to_entries('{"a": 1, "b": 2}')) = '[{"value":1,"key":"a"}, {"value":2,"key":"b"}]'
map_keys(json_decode('{ "a" : 1, "b" : 2 }')) = ['a', 'b']
map_values(json_decode('{ "a" : 1, "b" : 2 }')) = [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 值
md5('some val') = '1b68352b3e9c2de52ffd322e30bffcc4'
sha('some val') = 'f85ba28ff5ea84a0cbfa118319acb0c5e58ee2b9'
sha256('some val') = '67f97635d8a0e064f60ba6e8846a0ac0be664f18f0c1dc6445cd3542d2b71993'
压缩解压缩函数
函数名函数功能参数返回值
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'
zip_uncompress(hexstr2bin('789CCB48CDC9C95728CF2FCA4901001A0B045D')) = 'hello world'
比特操作函数
函数名函数功能参数返回值
subbits从二进制数据的起始位置获取指定长度的比特位, 然后转换为无符号整型 (大端).1. 二进制数据 2. 要获取的长度(bits)
subbits从二进制数据的指定下标位置获取指定长度的比特位, 然后转换为无符号整型 (大端). 下标是从 1 开始的1. 二进制数据 2. 起subbits始位置的下标 3. 要获取的长度(bits)
subbits从二进制数据的指定下标位置获取指定长度的比特位, 然后按照给定的参数转换为想要的数据类型. 下标是从 1 开始的.1. 二进制数据 2. 起始位置的下标 3. 要获取的长度(bits) 4. 数据类型,可选值:'integer', 'float', 'bits' 5. 符号类型, 只对整型数据有效, 可选值:'unsigned', 'signed', 6. 大端还是小端, 只对整型数据有效, 可选值:'big', 'little'获取到的数据
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
时间与日期函数
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

时间字符串编解码格式

占位符含义取值范围
%Y0000 - 9999
%m01 - 12
%d01 - 31
%H00 - 12
%M00 - 59
%S01 - 59
%N纳秒000000000 - 999999999
%3N毫秒000000 - 999999
%6N微秒000 - 000
%z时间偏移量 [+|-]HHMM-1159 至 +1159
%:z时间偏移量 [+|-]HH:MM-11:59 至 +11:59
%::z时间偏移量 [+|-]HH:MM:SS-11:59:59 至 +11:59:59

时间偏移量定义

格式含义示例
zUTC Zulu 时间固定值 +00:00
ZUTC Zulu 时间,与 z 相同固定值 +00:00
local系统时间自动获取,例如 北京时间 +08:00 Zulu 时间 +00:00 瑞典斯德哥尔摩时间 +02:00 洛杉矶时间 -08:00
`[+-]HHMM`%z 格式
`[+-]HH:MM`%:z 格式
`[+-]HH:MM:SS`%::z 格式
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
FunctionPurposeParametersReturned value
mongo_date生成当前时间的 mongodb ISODate 类型-ISODate 类型的时间
mongo_date生成指定 Unix 时间戳的 mongodb ISODate 类型,毫秒级1. 毫秒级 Unix 时间戳ISODate 类型的时间
mongo_date指定时间单位,生成指定 Unix 时间戳的 mongodb ISODate 类型1. Unix 时间戳 2. 时间单位ISODate 类型的时间

时间单位可以是以下其中之一: 'second', 'millisecond', 'microsecond' or 'nanosecond'.

mongo_date() = 'ISODate("2012-12-19T06:01:17.171Z")'
mongo_date(timestamp) = 'ISODate("2012-12-19T06:01:17.171Z")'
mongo_date(timestamp, 'millisecond') = 'ISODate("2012-12-19T06:01:17.171Z")'