SQL手册
更新时间:2019-06-14
规则引擎的SELECT子句和WHERE子句语法总体上遵守SQL92标准,因此标准操作符、标量函数均可以使用。
下面重点介绍在物联网场景下常用的语法和函数。
常用语法
规则引擎的SQL语法对JSON数据做了特殊的优化,以方便选择字段,或者构造期望的结果消息。下面是几种常用的语法举例。
输入消息 | SELECT子句 | 结果消息 | 备注 |
---|---|---|---|
{"a":"b", "c":7} | * | {"a":"b", "c":7} | 选择所有的字段 |
{"a":"b", "c":7} | c | {"c":7} | 选择一个字段 |
{"c": { "d": 9 }} | c.d | {"c": {"d": 9}} | 选择嵌套字段 |
{"a":"b", "c":7} | a AS a1 | {"a1":"b"} | 重命名一个字段 |
{"c": { "d": 9 }} | c.d AS e.f | {"e": { "f": 9 }} | 选择嵌套字段,并且存入另外一个嵌套字段 |
{} | 'abc' AS d | {"d":"abc"} | 插入一个字符常量字段 |
{} | 'abc' AS d.e | {"d": { "e": "abc" }} | 插入一个字符常量到一个嵌套字段 |
{"a":"b", "c":7} | * AS d | {"d":{"a":"b", "c":7}} | 将所有字段嵌套到名为d的对象下面 |
常用函数
下面是常用函数,及其用途和示例
函数 | 用途 | 示例 |
---|---|---|
CURRENT_TIMESTAMP | 取系统当前时间 | CURRENT_TIMESTAMP |
extract | 提取时间戳各字段 | extract(epoch FROM CURRENT_TIMESTAMP) |
substring | 取字符串子串 | substring(str, 1, 10) |
position | 取子串在字符串中的位置 | position('ab' IN '111ab') |
CHAR_LENGTH | 求字符串长度 | CHAR_LENGTH(deviceid) |
|| | 字符串串联 | 'devices/' || deviceid |
abs | 求绝对值 | abs(data) |
floor | 向下取整 | floor(temperature) |
ceil | 向上取整 | ceil(temperature) |
power | 乘幂 | power(a, 2) |
exp | 对e取幂 | exp(3) |
sqrt | 求平方根 | sqrt(a) |
mod | 取模 | mod(10, 8) |
nullif | 如果两个参数相同返回null,否则返回参数一 | nullif(a, b) |
coalesce | 返回第一个不为null的参数,否则返回null | coalesce(a, b) |
新增函数
为了方便某些物联网特定的操作,新增了如下函数。
函数 | 用途 | 示例 |
---|---|---|
topic | 取输入消息的物接入主题 | topic() |
clientid | 取输入消息发送方的clientid | clientid() |
clientip | 取输入消息发送发的ip | clientip() |
qos | 取输入消息发送时的QoS | qos() |
NEWID | 生成一个uuid | NEWID() |
hex2dec | 将HEX STRING格式数据转化成整数 | hex2dec('0f'), 返回15 |
lookup_num | 读取规则字典,返回一个数值类型 | lookup_num('car001.speed') |
lookup_str | 读取规则字典,返回一个字符串类型 | lookup_str('car001.info.imei') |
lookup_obj | 读取规则字典,返回一个JSON对象 | lookup_obj('car001.info') |
常用操作符
+,-,*,/,<,>,<>,>=,<=,and,or,in,like,case when