

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Função SUBSTRING
<a name="r_SUBSTRING"></a>

Retorna o subconjunto de uma string com base na posição inicial especificada da string.

Se a entrada for uma cadeia de caracteres, a posição inicial e o número de caracteres extraídos são baseados nos caracteres, e não bytes, de forma que caracteres multibyte são contados como caracteres simples. Se a entrada for uma expressão binária, a posição inicial e a substring extraída são baseadas em bytes. Você não pode especificar um comprimento negativo, mas pode especificar uma posição inicial negativa.

## Sintaxe
<a name="r_SUBSTRING-synopsis"></a>

```
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
```

```
SUBSTRING(character_string, start_position, number_characters )
```

```
SUBSTRING(binary_expression, start_byte, number_bytes )
```

```
SUBSTRING(binary_expression, start_byte )
```

## Argumentos
<a name="r_SUBSTRING-arguments"></a>

 *character\_string*   
A string a ser pesquisada. Tipos de dados não caracteres são tratados como uma string. 

 *start\_position*   
A posição dentro da sequência para começar a extração, começando em 1. A *start\_position* é baseada no número de caracteres, e não bytes, de forma que caracteres multibyte são contados como caracteres simples. Esse número pode ser negativo.

 *number\_characters*   
O número de caracteres a extrair (o comprimento da substring). O *number\_characters* é baseado no número de caracteres, e não bytes, de forma que caracteres multibyte são contados como caracteres simples. Esse número não pode ser negativo.

 *binary\_expression*   
O binary\_expression do tipo de dados VARBYTE a ser pesquisado. 

 *start\_byte*   
A posição dentro da expressão binária para começar a extração, começando por 1. Esse número pode ser negativo.

 *number\_bytes*   
O número de bytes a serem extraídos, ou seja, o comprimento da substring. Esse número não pode ser negativo.

## Tipo de retorno
<a name="r_SUBSTRING-return-type"></a>

VARCHAR ou VARBYTE, de acordo com a entrada.

## Observações sobre o uso
<a name="r_SUBSTRING_usage_notes"></a>

Veja a seguir alguns exemplos de como você pode usar *start\_position* e *number\_characters* para extrair substrings de várias posições em uma string.

O seguinte exemplo retorna uma string de quatro caracteres começando com o sexto caractere. 

```
select substring('caterpillar',6,4);
substring
-----------
pill
(1 row)
```

Se *start\_position* \+ *number\_characters* exceder o comprimento da *string*, SUBSTRING exibirá uma substring que começa na *start\_position* e vai até o final da string. Por exemplo: 

```
select substring('caterpillar',6,8);
substring
-----------
pillar
(1 row)
```

Se `start_position` for negativa ou 0, a função SUBSTRING retornará uma substring começando no primeiro caractere da string com um comprimento de `start_position` \+ `number_characters` -1. Por exemplo:

```
select substring('caterpillar',-2,6);
substring
-----------
cat
(1 row)
```

Se `start_position` \+ `number_characters` -1 for menor ou igual a zero, a SUBSTRING retornará uma string vazia. Por exemplo:

```
select substring('caterpillar',-5,4);
substring
-----------

(1 row)
```

## Exemplos
<a name="r_SUBSTRING-examples"></a>

O seguinte exemplo retorna o mês da string LISTTIME na tabela LISTING: 

```
select listid, listtime,
substring(listtime, 6, 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

O seguinte exemplo é o mesmo que o exemplo acima, mas usa a opção FROM...FOR: 

```
select listid, listtime,
substring(listtime from 6 for 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

Não é possível usar a SUBSTRING para extrair previsivelmente o prefixo de uma string que possa conter caracteres multibyte, pois é necessário especificar o comprimento de uma string multibyte com base no número de bytes, e não no número de caracteres. Para extrair o segmento inicial de uma sequência com base no comprimento em bytes, você pode CAST a string como VARCHAR (*byte\_length*) para truncar a string, onde *byte\_length* é o tamanho exigido. O seguinte exemplo extrai os primeiros cinco bytes da string `'Fourscore and seven'`.

```
select cast('Fourscore and seven' as varchar(5));

varchar
-------
Fours
```

O seguinte exemplo mostra uma posição inicial negativa de um valor binário `abc`. Como a posição inicial é -3, a substring é extraída do início do valor binário. O resultado é exibido automaticamente como a representação hexadecimal da substring binária.

```
select substring('abc'::varbyte, -3);

 substring
-----------
 616263
```

O seguinte exemplo mostra 1 para a posição inicial de um valor binário `abc`. Como não há tamanho especificado, a string é extraída da posição inicial até o final da string. O resultado é exibido automaticamente como a representação hexadecimal da substring binária.

```
select substring('abc'::varbyte, 1);

 substring
-----------
 616263
```

O exemplo a seguir mostra 3 para a posição inicial de um valor binário `abc`. Como não há tamanho especificado, a string é extraída da posição inicial até o final da string. O resultado é exibido automaticamente como a representação hexadecimal da substring binária.

```
select substring('abc'::varbyte, 3);

 substring
-----------
 63
```

O exemplo a seguir mostra 2 para a posição inicial de um valor binário `abc`. A string é extraída da posição inicial para a posição 10, mas o final da string está na posição 3. O resultado é exibido automaticamente como a representação hexadecimal da substring binária.

```
select substring('abc'::varbyte, 2, 10);

 substring
-----------
 6263
```

O exemplo a seguir mostra 2 para a posição inicial de um valor binário `abc`. A string é extraída da posição inicial por 1 byte. O resultado é exibido automaticamente como a representação hexadecimal da substring binária.

```
select substring('abc'::varbyte, 2, 1);

 substring
-----------
 62
```

O exemplo a seguir retorna o nome `Ana` que aparece após o último espaço na string de entrada `Silva, Ana`.

```
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))

 reverse
-----------
 Ana
```