

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# CHARINDEX 函数
<a name="r_CHARINDEX"></a>

返回指定子字符串在字符串中的位置。

有关类似的函数，请参阅[POSITION 函数](r_POSITION.md)和[STRPOS 函数](r_STRPOS.md)。

## 语法
<a name="r_CHARINDEX-synopsis"></a>

```
CHARINDEX( substring, string )
```

## 参数
<a name="charindex-arguments"></a>

 *substring*   
要在 *string* 中搜索的子字符串。

 *string*   
要搜索的字符串或列。

## 返回类型
<a name="charindex-return-type"></a>

 INTEGER   
CHARINDEX 函数返回与子字符串的位置对应的 `INTEGER`（从 1 开始，而不是从 0 开始）。此位置基于字符数而不是字节数，这是为了将多字节字符作为单字符计数。如果在字符串未找到子字符串，CHARINDEX 将返回 `0`。

## 示例
<a name="sub-charindex-usage-notes-examples"></a>

要显示字符串 `fish` 在单词 `dog` 中的位置，请使用以下示例。

```
SELECT CHARINDEX('fish', 'dog');

+-----------+
| charindex |
+-----------+
|         0 |
+-----------+
```

要显示字符串 `fish` 在单词 `dogfish` 中的位置，请使用以下示例。

```
SELECT CHARINDEX('fish', 'dogfish');

+-----------+
| charindex |
+-----------+
|         4 |
+-----------+
```

 以下示例使用 TICKIT 示例数据库中的 SALES 表。有关更多信息，请参阅 [示例数据库](c_sampledb.md)。

要返回 SALES 表中佣金超过 999.00 的不同销售交易的数量，请使用以下示例。此命令通过检查小数点距离佣金值开头是否超过 4 位数来计算大于 999.00 的佣金。

```
SELECT DISTINCT CHARINDEX('.', commission), COUNT (CHARINDEX('.', commission))
FROM sales 
WHERE CHARINDEX('.', commission) > 4 
GROUP BY CHARINDEX('.', commission)
ORDER BY 1,2;

+-----------+-------+
| charindex | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```