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. Ooccurrence
parâmetro especifica a correspondência que você deseja extrair. O valor padrão deoccurrence
é 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 NULL
se 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.0
corresponde 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 products
tabela 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.