# 过滤条件

## 表达式

### 关系表达式
| 关系 | 运算符 | 语法 |
|:--:|:--:|:--:|
| 等于 | = | 属性名 = 值 |
| 不等于 | != | 属性名 != 值 |
| 大于 | > | 属性名> > 值 |
| 大于等于 | >= | 属性名 >= 值 |
| 小于 | < | 属性名 < 值 |
| 小于等于 | <= | 属性名 <= 值 |
| 包含 | contain  | 属性名 contain  值 |
| 前缀 | startwith  | 属性名 startwith  值 |
| 后缀 | endwith   | 属性名 endwith   值 |
| 为空 | isnull   | 属性名 isnull  值 |
| 在列表内 | in   | 属性名 in [值1, 值2, 值3...] |

::: warning 注意 
* 表达式必须包含“属性名”；
* 属性名必须在表达式左端；
* 在列表内的 [] 方括号中值类型必须一致，使用 in 必须使用 [] 方括号
:::

#### 等于 =
* 字符串类型，例如查询空调机组设备 category
```metadata json
"Filters":" category = 'ATAH'"
```
* 日期类型，例如查询 2020-08-12 创建的设备 createTime
```metadata json
"Filters":" createTime = '2020-08-12'"
```
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询已完成的设备
```metadata json
"Filters":" codeType = 0 "
```
* 布尔类型，例如设备有一个开关属性，实时记录设备是否在运转，停止运转时会把这个属性设置为 false  ，查询为未开启的设备 switch
```metadata json
"Filters":" switch = false "
```

#### 不等于 !=
* 字符串类型，例如查询空调机组类型以外的设备 category
```metadata json
"Filters":" category != 'ATAH'"
```
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询待处理的设备
```metadata json
"Filters":" codeType != 0 "
```

#### 大于 >
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询带换码和带撕码的设备
 ```metadata json
 "Filters":" codeType > 1 "
 ```
* 日期类型，例如查询 2020-08-12 以后创建的设备 createTime 前提是不包含 2020-08-12 这个日期的
```metadata json
"Filters":" createTime > '2020-08-12'"
```

#### 大于等于 >=
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询待贴码、带换码和带撕码的设备
 ```metadata json
 "Filters":" codeType >= 1 "
 ```
* 日期类型，例如查询 2020-08-12 以后创建的设备 createTime 包含 2020-08-12 这个日期的
```metadata json
"Filters":" createTime >= '2020-08-12'"
```

#### 小于 <
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询待贴码、完成贴码
 ```metadata json
 "Filters":" codeType < 2 "
 ```
* 日期类型，例如查询 2020-08-12 之前创建的设备 createTime 不包含 2020-08-12 这个日期的
```metadata json
"Filters":" createTime < '2020-08-12'"
```

#### 小于等于 <=
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询待贴码、完成贴码和带换码的设备
 ```metadata json
 "Filters":" codeType <= 2 "
 ```
* 日期类型，例如查询 2020-08-12 之前创建的设备 createTime 包含 2020-08-12 这个日期的
```metadata json
"Filters":" createTime <= '2020-08-12'"
```

#### 包含 contain
* 字符串，例如查询设备本地名称中包含 “风机” 两个字的设备 EquipLocalName
```metadata json
"Filters":" EquipLocalName contain '风机'"
```

#### 前缀
只适用于字符串类型
例如设备 id 是以 Eq 开头，空间id是以 Sp 开头，区分设备和空间就需要根据前缀来获取
```metadata json
"Filters":" Id startwith 'Eq'"
```

#### 后缀
只适用于字符串类型
例如楼层的 FloorMap 信息点是存储底图 key 值的，可能是 jsonz 压缩数据的 key ,也可能是 png 、jpg，查询后缀为 jsonz 的楼层数据
```metadata json
"Filters":" floorMap endwith 'jsonz'"
```

#### 空
判断某一个对象的某个信息点是否有值，例如查询本地名称为空的设备
```metadata json
"Filters":" EquipLocalName isnull "
```

#### 在...内
通常查询的时候会根据同一条件的多个值来获取数据,只适用于字符串类型
例如有一组设备的id列表，查询值这个把列表中的所有设备 ['id1','id2','id3','id4','id5']
```metadata json
"Filters":" EquipID in ['id1','id2','id3','id4','id5'] "
```
* 数值类型，例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询完成贴码、带换码和带撕码的设备。
```metadata json
"Filters":" codeType in [0,2,3] "
```

### 逻辑表达式
| 逻辑 | 运算符 | 语法 |
|:--:|:--:|:--:|
| 非 | not <br> ! | not 表达式 <br> !表达式 |
| 与 |  && <br> and | 表达式1 && 表达式2 <br> 表达式1 and 表达式2 |
| 或 | \|\| <br> or | 表达式1 \|\| 表达式2  <br> 表达式1 or 表达式2 |
| 多表达式 | ; | 表达式1 ; 表达式2 ; 表大式3 ... |

#### 非 
* not 例如设备有贴码状态 0.完成贴码 1.待贴码 2.带换码 3.带撕码  codeType ，查询完成贴码、带换码和带撕码的设备。









