# Mid 指令碼與圖表函數

Mid() 會傳回輸入字串的部分，從第二個引數 'start' 定義的字元位置開始，並傳回第三個引數 'count' 定義的字元數目。如省略 'count'，則會傳回剩餘的輸入字串。輸入字串中的第一個字元編號為 1。

語法：

Mid(text, start[, count])

傳回的資料類型： 字串

引數

| 引數 | 描述 |
| --- | --- |
| text | 原始字串。 |
| start | 定義要包括的 text 第一個字元位置的整數。 |
| count | 定義輸出字串的字串長度。如果省略，會包括 start 定義位置的所有字元。 |

範例：圖表運算式

| 範例 | 結果 |
| --- | --- |
| `Mid( 'abcdef',3 )` | 傳回 `cdef` |
| `Mid( 'abcdef',3, 2 )` | 傳回 `cd` |

## 範例 - Mid 基礎事項

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Mid.htm)

#### 圖表運算式

概述

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 載入到稱為 `Example` 之資料表格的資料集。

* 資料表格中的欄位如下：

  * `InputText`，原始文字字串

  * `StartPosition`，處理後原始文字字串中要納入的第一個字元的開始位置

  * `CharacterCount`，要傳回的字元數量 (選用參數)

載入指令碼

```
Example:
Load * inline [
InputText, StartPosition, CharacterCount
abcdef, 3, 2
abcdef, 2, 3
210714, 3, 2
210714, 2, 3
];
```

結果

載入資料並開啟工作表。建立新的表格並將這些欄位新增為維度：

* ` InputText
                                   `

* `StartPosition`

* `CharacterCount`

建立下列計算維度：

* `=mid(InputText,StartPosition)`，用來從 `StartPosition` 欄位中的值開始計算要從 `InputText` 擷取的字元。由於未提供 `Count` 參數，該函數將傳回從 `StartPosition` 值到 `InputString` 結束的所有字元。

* `=mid(InputText,StartPosition,CharacterCount)`，用來從 `StartPosition` 欄位中的值開始計算要從 `InputText` 擷取的字元。`CharacterCount` 中的值決定傳回的字元數量，從 `StartPosition` 欄位中的值開始。

結果表格

| InputText | StartPosition | 字元數 | Mid(輸入文字,起始位置) | Mid(輸入文字,起始位置,字元數) |
| --- | --- | --- | --- | --- |
| abcdef | 2 | 3 | bcdef | bcd |
| abcdef | 3 | 2 | cdef | cd |
| 20210714 | 2 | 3 | 10714 | 107 |
| 20210714 | 3 | 2 | 0714 | 7 |

第一列傳回第一個運算式的值 `bcdef`。此運算式從位置 2 開始，並傳回所有字元，因為未設定 `Count` 引數。第二個運算式也從位置 2 開始，但僅傳回字元 `bcd`，因為 `Count` 引數是 2。

第二列傳回第一個運算式的值 `cdef`。此運算式從位置 3 開始，並傳回所有字元，因為未設定 `Count` 引數。第二個運算式也從位置 3 開始，但僅傳回字元 `cd`，因為 `Count` 引數是 2。

第三列傳回第一個運算式的值 `10714`。此運算式從位置 2 開始，並傳回所有字元，因為未設定 `Count` 引數。第二個運算式也從位置 2 開始，但僅傳回字元 `107`，因為 `Count` 引數是 3。

第四列傳回第一個運算式的值 `0714`。此運算式從位置 3 開始，並傳回所有字元，因為未設定 `Count` 引數。第二個運算式也從位置 2 開始，但僅傳回字元 `07`，因為 `Count` 引數是 2。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Mid.htm)

#### 載入指令碼

以下程式碼顯示如何在載入指令碼中使用該函數。

```
Example:
Load *,
mid(Text,StartPosition) as Mid1,
mid(Text,StartPosition,Count) as Mid2;
Load * inline [
Text, StartPosition, Count
'abcdef', 3, 2
'abcdef', 2, 3
'210714', 3, 2
'210714', 2, 3
];
```

結果表格

| 文字 | StartPosition | Mid1 | 計數 | Mid2 |
| --- | --- | --- | --- | --- |
| abcdef | 3 | cdef | 2 | cd |
| abcdef | 2 | bcdef | 3 | bcd |
| 210714 | 3 | 0714 | 2 | 7 |
| 210714 | 2 | 10714 | 3 | 107 |

## 範例 - Mid 使用情境

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Mid.htm)

#### 圖表運算式

概述

資料來源包含一個名為 `OrderID` 的欄，該欄使用下列結構化格式：`ORDYYYY-COUNTRYCODE-ORDERNUMBER`。為了滿足報告要求，您必須擷取國家代碼並以獨立的欄顯示。

開啟資料載入編輯器並將下面的載入指令碼新增至新的區段。

載入指令碼包含：

* 載入到稱為 `Orders` 之資料表格的資料集。

* 資料表格中稱為 `OrderID` 的一個欄位。

載入指令碼

```
Orders:
Load * inline [
OrderID
ORD2024-US-123456
ORD2024-UK-654321
ORD2024-CA-789123
];
```

結果

載入資料並開啟工作表。建立新的表格並將此欄位新增為維度：

* ` OrderID
                                   `

建立下列計算維度：

* `=Mid(OrderID, 9, 2)` 用來從 `OrderID` 擷取兩個字母的國家代碼。

結果表格

| OrderID | Mid(OrderID, 9, 2) |
| --- | --- |
| ORD2024-CA-789123 | CA |
| ORD2024-UK-654321 | 英國 |
| ORD2024-US-123456 | 美國 |

`Mid` 函數的輸出已成功從 `OrderID` 字串值中擷取兩個字母的國家代碼。

## 瞭解更多資訊

* [Index 指令碼與圖表函數](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)