

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# SUBSTRING
<a name="sql-reference-substring"></a>

```
 SUBSTRING ( <source-string> FROM <start-position> [ FOR <string-length> ] )
 SUBSTRING ( <source-string>, <start-position> [ , <string-length> ] )
 SUBSTRING ( <source-string> SIMILAR <pattern> ESCAPE <escape-char> )
 <source-string> := <character-expression>
 <start-position> := <integer-expression>
 <string-length> := <integer-expression>
 <regex-expression> := <character-expression>
 <pattern> := <character-expression>
 <escape-char> := <character-expression>
```

SUBSTRING 将提取第一个参数中指定的源字符串的一部分。提取从 *start-position* 的值或第一个与 *regex-expression* 的值匹配的表达式开始。

如果为 *string-length* 指定一个值，则仅返回该数量的字符。如果字符串中的剩余字符数少于该数量，则仅返回剩余的字符。如果未指定 *string-length*，该字符串长度默认为输入字符串的剩余长度。

如果起始位置小于 1，则会按照起始位置为 1 来解释它，并且字符串长度将减去 (1 - 起始位置)。例如，请参阅以下内容。如果起始位置大于字符串中的字符数，或长度参数为 0，则结果为空字符串。

## 参数
<a name="sql-reference-substring-parameters"></a>

*source-string*

用于搜索位置或正则表达式匹配项的字符串。

*start-position*

要返回的 *source-string* 的第一个字符。如果 *start-position* 大于 *source-string* 的长度，则 SUBSTRING 返回 null。

*string-length*

要返回的 *source-string* 的字符数。

*regex-expression*

要匹配并从 *source-string* 返回的字符模式。仅返回第一个匹配项。

*pattern*

包含以下内容的三部分字符模式：
+ 要在返回的子字符串之前查找的字符串
+ 返回的子字符串
+ 要在返回的子字符串之后查找的字符串

这些部分由一个双引号 (") 和一个指定的转义字符分隔。有关更多信息，请参阅以下[Similar...Escape](#sql-reference-substring-examples-similar)示例。

## 示例
<a name="sql-reference-substring-examples"></a>

### FROM/ FOR
<a name="sql-reference-substring-examples-from-for"></a>


| 函数 | 结果 | 
| --- | --- | 
|  SUBSTRING('123456789' FROM 3 FOR 4)  |  3456  | 
|  SUBSTRING('123456789' FROM 17 FOR 4)  |  <empty string>  | 
|  SUBSTRING('123456789' FROM -1 FOR 4)  |  12  | 
|  SUBSTRING('123456789' FROM 6 FOR 0)  |  <empty string>  | 
|  SUBSTRING('123456789' FROM 8 FOR 4)  |  89  | 

### FROM Regex
<a name="sql-reference-substring-examples-from"></a>


| 函数 | 结果 | 
| --- | --- | 
| SUBSTRING('TECHNOLOGY' FROM 'L[A-Z]\$1') | LOGY | 
| SUBSTRING('TECHNOLOGY' FROM 'FOO') | null | 
| SUBSTRING('TECHNOLOGY' FROM 'O[A-Z]') | OL | 

### 数值
<a name="sql-reference-substring-examples-numeric"></a>


| 函数 | 结果 | 
| --- | --- | 
|  SUBSTRING('123456789', 3, 4)  |  3456  | 
|  SUBSTRING('123456789', 7, 4)  |  789  | 
|  SUBSTRING('123456789', 10, 4)  |  null  | 

### Similar...Escape
<a name="sql-reference-substring-examples-similar"></a>


| 函数 | 结果 | 
| --- | --- | 
|  SUBSTRING('123456789' SIMILAR '23\$1"456\$1"78' ESCAPE '\$1')  |  456  | 
|  SUBSTRING('TECHNOLOGY' SIMILAR 'TECH%"NOLO%"GY' ESCAPE '%')  |  NOLO  | 

## 注意
<a name="sql-reference-substring-notes"></a>
+ Amazon Kinesis Data Analytics 流式 SQL 不支持 SQL:2008 中定义的可选“USING CHARACTERS \$1 OCTETS”子句。只采用 USING CHARACTERS。
+ 上文列出的 SUBSTRING 函数的第二种和第三种形式（使用正则表达式，并使用逗号而不是 FROM...FOR）不是 SQL:2008 标准的一部分。它们是针对 Amazon Kinesis Data Analytics 的流式 SQL 扩展的一部分。