# 運算式運算子

當 [建置運算式](https://help.qlik.com/zh-TW/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。只要其中一個運算元為 true，即使另一個運算元為 NULL，結果仍為 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]+$'` 說明了語法。若沒有實作，評估就會失敗。 |

## 位元運算子

這些二元運算子作用於整數的位元，而非邏輯條件。`|` 表示位元 OR，即使編輯器也將其列在邏輯類別中也是如此。

整數位元運算

| 運算子 | 意義 | 範例與結果 |
| --- | --- | --- |
| `<<` | 將左側整數向左位移右運算元所指定的位元數。 | `3 << 1` 回傳 `6`。 |
| `>>` | 將左側整數向右位移右運算元所指定的位元數。 | `8 >> 1` 回傳 `4`。 |
| `&` | 位元 AND：僅在兩個運算元的該位元皆已設定時，才會設定結果位元。 | `6 & 3` 回傳 `2`。 |
| `\|` | 位元 OR：若任一運算元的該位元已設定，則設定結果位元。 | `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-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Transformation/Expression-functions.htm)。