# 表达式运算符

在 [构建表达式](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Building-expressions.htm) 时，使用运算符计算值、比较输入并组合条件。

以下语义适用于移动任务表达式。在云数据平台上执行的表达式使用该平台的语义。在运算符两侧添加空格，并为文本和日期常量加上引号，例如 `$HIRE_DATE < '2026-10-08'`。

## 算术运算符

数值的算术运算

| 运算符 | 含义 | 示例与结果 |
| --- | --- | --- |
| `+` | 将两个操作数相加。 | `2 + 3` 返回 `5`。 |
| `-` | 从左操作数中减去右操作数。前导负号对值取反。 | `5 - 2` 返回 `3`。 |
| `*` | 将操作数相乘。 | `3 * 4` 返回 `12`。 |
| `/` | 将左操作数除以右操作数。整数除法向零截断。实数操作数会保留小数结果。除以零返回 NULL。 | `7 / 2` 返回 `3`；`7.0 / 2` 返回 `3.5`。 |
| `%` | 将两个操作数转换为整数，并返回除法余数。这不是百分比计算。 | `7 % 3` 返回 `1`。 |

## 比较运算符

比较运算在为 true 时返回 1，为 false 时返回 0。与 NULL 进行普通比较会返回 NULL；请使用 `IS` 或 `IS NOT` 来测试缺失值。

比较两个值

| 运算符 | 含义 | 示例与结果 |
| --- | --- | --- |
| `=` | 测试相等性。 | `3 = 3` 返回 `1`。 |
| `!=` | 测试不等性。 | `3 != 4` 返回 `1`。 |
| `<>` | 替代不等运算符。 | `3 <> 3` 返回 `0`。 |
| `<` | 测试左侧的值是否更小。 | `2 < 3` 返回 `1`。 |
| `<=` | 测试是否小于或等于。 | `3 <= 3` 返回 `1`。 |
| `>` | 测试左侧的值是否更大。 | `4 > 3` 返回 `1`。 |
| `>=` | 测试是否大于或等于。 | `3 >= 3` 返回 `1`。 |
| `IS` | 测试是否相等而不返回 NULL。两个 NULL 值相等；NULL 值与非 NULL 值不相等。 | `NULL IS NULL` 返回 `1`。 |
| `IS NOT` | 测试不相等性且不返回 NULL。 | `NULL IS NOT 3` 返回 `1`。 |

## 逻辑和条件操作数

组合条件与选择值

| 运算符 | 含义 | 示例与结果 |
| --- | --- | --- |
| `AND` | 当两个条件均为 true 时为 true。如果一个操作数为 false，即使另一个操作数为 NULL，结果也为 false。 | `(3 > 2) AND (4 < 3)` 返回 `0`。 |
| `OR` | 当任一条件为 true 时为 true。即使另一个操作数为 NULL，值为 true 的操作数也会使结果为 true。 | `(3 > 2) OR (4 < 3)` 返回 `1`。 |
| `IN` | 测试带括号列表中的成员资格。如果没有匹配的值且列表中包含 NULL，则返回 NULL。空列表返回 0，包括左操作数为 NULL 的情况。 | `2 IN (1, 2, 3)` 返回 `1`；`4 IN (1, NULL)` 返回 NULL。 |
| `CASE` | 返回第一个匹配的分支。使用基准值，将其与每个 WHEN 值进行比较。如果没有，则测试每个 WHEN 条件。如果没有分支匹配，则使用 ELSE；如果缺少 ELSE，则使用 NULL。 | `CASE WHEN 5 > 3 THEN 'High' ELSE 'Low' END` 返回 `'High'`。`CASE 2 WHEN 1 THEN 'One' WHEN 2 THEN 'Two' END` 返回 `'Two'`。 |

## 字符串和模式运算符

连接文本和匹配模式

| 运算符 | 含义 | 示例与结果 |
| --- | --- | --- |
| `\|\|` | 连接文本值。NULL 操作数会产生 NULL。 | `'John' \|\| ' ' \|\| 'Smith'` 返回 `'John Smith'`。 |
| `LIKE` | 比较左侧字符串与右侧模式。`%` 匹配零个或多个字符；`_` 匹配一个字符。默认忽略 ASCII 字母大小写，但不忽略非 ASCII 大小写差异。ESCAPE 指定用于原义通配符的单个字符。 | `'Alice' LIKE 'A%'` 返回 `1`。`'10%' LIKE '10!%' ESCAPE '!'` 返回 `1`。 |
| `GLOB` | 使用 Unix 风格模式进行区分大小写的匹配。`*` 匹配零个或多个字符，`?` 匹配一个，方括号定义字符集。 | `'file.csv' GLOB '*.csv'` 返回 `1`；`'File.CSV' GLOB '*.csv'` 返回 `0`。 |
| `MATCH` | 委托给应用程序定义的 `match()` 函数。需要一个可用的实现；默认的 SQLite 实现会引发错误。 | `'Quarterly sales' MATCH 'sales'` 说明了语法。结果取决于应用程序的实现。 |
| `REGEXP` | 委托给应用程序定义的 `regexp()` 函数。SQLite 默认不提供此函数。 | `'ABC123' REGEXP '^[A-Z]+[0-9]+$'` 说明了语法。如果没有实现，评估将失败。 |

## 按位运算符

这些二元运算符作用于整数位，而非逻辑条件。`|` 表示按位或，即使编辑器也将其列在逻辑类别中也是如此。

整数位运算

| 运算符 | 含义 | 示例与结果 |
| --- | --- | --- |
| `<<` | 将左侧整数左移右操作数指定的位数。 | `3 << 1` 返回 `6`。 |
| `>>` | 将左侧整数右移右操作数指定的位数。 | `8 >> 1` 返回 `4`。 |
| `&` | 按位与：仅当两个操作数的对应位都置位时，才将结果位置位。 | `6 & 3` 返回 `2`。 |
| `\|` | 按位或：如果任一操作数的对应位为 1，则将结果中的该位设为 1。 | `6 \| 3` 返回 `7`。 |

## 求值顺序与缺失值

对于上述二元运算符，优先级从高到低依次为：连接；乘法、除法和取余；加法和减法；位运算；顺序比较；相等和模式测试；AND；然后是 OR。同一级别的运算符从左到右求值。圆括号会覆盖此顺序：`(2 + 3) * 4` 返回 `20`，而 `2 + 3 * 4` 返回 `14`。

大多数运算符在操作数为 NULL 时返回 NULL。上述例外包括 `IS`、`IS NOT` 以及特定的 `AND`、`OR` 和 `IN` 情况。当缺失值应有替换值时，使用 `$COALESCE`。请参阅 [表达式函数](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Expression-functions.htm)。