Função MySQL REGEXP_SUBSTR()

Resumo : neste tutorial, você aprenderá como usar a REGEXP_SUBSTR()função MySQL para obter a substring da string que corresponde a uma expressão regular.

Introdução à função MySQL REGEXP_SUBSTR()

A REGEXP_SUBSTR()função permite extrair uma substring da string que corresponde a uma expressão regular .

Aqui está a sintaxe da REGEXP_SUBSTR()função:

REGEXP_SUBSTR (
    string, 
    pattern, 
    position, 
    occurrence, 
    match_type
)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • string: esta é a string ou valor de entrada em uma coluna da qual você deseja extrair a substring.
  • pattern: este é o padrão da expressão regular que você deseja corresponder.
  • position: esta é a posição inicial na string que você deseja que a função comece a corresponder. A posição é opcional. O padrão é 1, que começa a corresponder desde o início da string.
  • occurrence: a string pode ter várias correspondências. O occurrenceparâmetro especifica a correspondência que você deseja extrair. O valor padrão de occurrenceé 1, o que significa que a função retornará a primeira correspondência.
  • match_type: esta é uma string que contém uma ou mais opções que instruem a função sobre como realizar a correspondência. Por exemplo, c é uma correspondência que diferencia maiúsculas de minúsculas, enquanto i é uma correspondência que não diferencia maiúsculas de minúsculas.

A função retorna NULLse não houver correspondência. Se a string ou padrão for NULL, a REGEXP_SUBSTR()função também retornará NULL.

Antes do MySQL 8.0.17, REGEXP_SUBSTR()retorna uma string que usa o conjunto de caracteres UTF-16. No MySQL 8.0.17 e posterior, a função retorna uma substring que usa o conjunto de caracteres e agrupamento da expressão.

Exemplos de funções MySQL REGEXP_SUBSTR()

Vejamos alguns exemplos de uso da REGEXP_SUBSTR()função.

1) Exemplo simples de função REGEXP_SUBSTR()

O exemplo a seguir usa a REGEXP_SUBSTR()função para obter a versão do MySQL:

SELECT 
  REGEXP_SUBSTR('MySQL 8.0', '\\d+\.\\d+') version;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------+
| version |
+---------+
| 8.0     |
+---------+
1 row in set (0.00 sec)    Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, usamos o padrão '\\d+\.\\d+'que corresponde a um ou mais dígitos, seguido por um caractere (.) e seguido por um ou mais dígitos. Portanto, a substring 8.0corresponde ao padrão.

2) Exemplo de posição

Por padrão, a REGEXP_SUBSTR()correspondência começa a partir do início da string. Se quiser que a função comece a procurar a posição correspondente a uma posição especificada, você pode usar um argumento de posição. Por exemplo:

SELECT 
  REGEXP_SUBSTR(
    '3 apples weighs 400 grams ', '\\d+',
     2
  ) weight;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| weight |
+--------+
| 400    |
+--------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, o \\d+padrão corresponde a um ou mais dígitos. Porém, instruímos a função a pesquisar a partir da posição 2. Portanto, ela retorna o número 400 em vez de 3.

3) Exemplo de ocorrência

Se houver diversas correspondências, você poderá especificar qual correspondência deseja retornar usando o parâmetro de ocorrência. Por exemplo:

SELECT 
  REGEXP_SUBSTR(
    '3 apples weighs 400 grams ', '\\d+',
     1,
     2
  ) weight;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+--------+
| weight |
+--------+
| 400    |
+--------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, \\d+ corresponde a dois números 2 e 400. Nós o instruímos a retornar a segunda correspondência, que é 400.

4) Usando REGEXP_SUBSTR() com dados da tabela

Usaremos a productstabela do banco de dados de exemplo :

O exemplo a seguir usa a REGEXP_SUBSTR()função para extrair o ano dos nomes dos produtos:

SELECT 
  productName, 
  REGEXP_SUBSTR(productName, '\\d{4}') year 
FROM 
  products 
WHERE 
  REGEXP_SUBSTR(productName, '\\d{4}') IS NOT NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------------------------------+------+
| productName                                 | year |
+---------------------------------------------+------+
| 1969 Harley Davidson Ultimate Chopper       | 1969 |
| 1952 Alpine Renault 1300                    | 1952 |
| 1996 Moto Guzzi 1100i                       | 1996 |
| 2003 Harley-Davidson Eagle Drag Bike        | 2003 |
| 1972 Alfa Romeo GTA                         | 1972 |
...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a função MySQL REGEXP_SUBSTR()para extrair a substring da string que corresponde a uma expressão regular.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *