# 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/sense/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 | 起始位置 | 字符数 | Mid(InputText,起始位置) | Mid(输入文本,起始位置,字符数 |
| --- | --- | --- | --- | --- |
| abcdef | 2 | 3 | bcdef | bcd |
| abcdef | 3 | 2 | cdef | cd |
| 20210714 | 2 | 3 | 10714 | 107 |
| 20210714 | 3 | 2 | 0714 | 07 |

第一行返回第一个表达式的值 `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/sense/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
];
```

结果表

| Text | 起始位置 | Mid1 | Count | Mid2 |
| --- | --- | --- | --- | --- |
| abcdef | 3 | cdef | 2 | cd |
| abcdef | 2 | bcdef | 3 | bcd |
| 210714 | 3 | 0714 | 2 | 07 |
| 210714 | 2 | 10714 | 3 | 107 |

## 示例 - Mid 场景

[](https://help.qlik.com/en-US/sense/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(订单ID, 9, 2) |
| --- | --- |
| ORD2024-CA-789123 | CA |
| ORD2024-UK-654321 | 英国 |
| ORD2024-US-123456 | 美国 |

`Mid` 函数的输出已成功从 `OrderID` 字符串值中提取出两个字母的国家代码。

## 了解详情

* [Index - 脚本和图表功能](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)