MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como REGEXP_SUBSTR() funciona no MariaDB


No MariaDB, o REGEXP_SUBSTR() A função retorna a substring que corresponde ao padrão de expressão regular fornecido.

Se não houver correspondência (ou seja, a string de entrada não contém a substring), o resultado é uma string vazia.

Sintaxe


A sintaxe fica assim:
REGEXP_SUBSTR(subject,pattern) 

Onde subject é a string de entrada e o pattern é o padrão de expressão regular para a substring.

Observe que, no momento da escrita, a versão do MariaDB de REGEXP_SUBSTR() aceita menos argumentos que o REGEXP_SUBSTR() do MySQL . A versão do MySQL permite que você forneça argumentos para a posição inicial da busca, qual ocorrência procurar, bem como uma forma de refinar a expressão regular.

Exemplo


Segue um exemplo básico:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd'); 

Resultado:
+--------------------------------------------+| REGEXP_SUBSTR('Tailândia e Laos', 'l.nd') |+------------------------------------------------ ----------+| terra |+--------------------------------------------+ 
Nesse caso, há uma correspondência e a substring é retornada.

Várias correspondências


Por padrão, se houver várias correspondências na string, a primeira será retornada:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd'); 

Resultado:
+----------------------------------------+| REGEXP_SUBSTR('Emprestar por terreno', 'l.nd') |+------------------------------------------------ ------+| Emprestar |+----------------------------------------+

Sem correspondência


Aqui está um exemplo em que não há correspondência:
SELECT REGEXP_SUBSTR('Lend for land', '^C'); 

Resultado:
+--------------------------------------+| REGEXP_SUBSTR('Emprestar por terreno', '^C') |+----------------------------------- ---+| |+-------------------------------------------------+

Não há correspondência, então o resultado é uma string vazia.

Sensibilidade de maiúsculas e minúsculas


O REGEXP_SUBSTR() A função segue as regras de diferenciação de maiúsculas e minúsculas da ordenação efetiva. A correspondência é realizada sem distinção entre maiúsculas e minúsculas para ordenações que não diferenciam maiúsculas de minúsculas e com distinção entre maiúsculas e minúsculas para ordenações que diferenciam maiúsculas de minúsculas e para dados binários.

Aqui está um exemplo:
SELECT 
    REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default",
    REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive",
    REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive"; 

Resultado:
+------------+------------------+-------------- --+| Meu padrão | Insensível a maiúsculas e minúsculas | Diferenciar maiúsculas de minúsculas |+------------+------------------+-------------- --+| Gato | Gato | |+------------+------------------+---------------- +

Meu agrupamento padrão não diferencia maiúsculas de minúsculas. As outras duas strings foram forçadas a uma ordenação sem distinção entre maiúsculas e minúsculas e ordenação com distinção entre maiúsculas e minúsculas, respectivamente.

Fornecendo um BINARY string também diferencia maiúsculas de minúsculas (veja abaixo).

Strings binárias


Passando um BINARY string também afeta a distinção entre maiúsculas e minúsculas. Com BINARY strings, um caractere maiúsculo é diferente de sua contraparte minúscula:

Exemplo:
SELECT 
    REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
    REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary"; 

Resultado:
+-----------+--------+| Personagem | Binário |+-----------+--------+| Gato | |+-----------+--------+

Aqui está o que acontece se mudarmos o caso:
SELECT 
    REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
    REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary"; 

Resultado:
+-----------+--------+| Personagem | Binário |+-----------+--------+| Gato | Gato |+-----------+--------+

Argumentos nulos


Passando null pois qualquer argumento resulta em null :
SELECT 
    REGEXP_SUBSTR(null, 'c.t') AS "1",
    REGEXP_SUBSTR('Cat', null) AS "2",
    REGEXP_SUBSTR(null, null) AS "3"; 

Resultado:
+------+------+------+| 1 | 2 | 3 |+------+------+------+| NULO | NULO | NULL |+------+------+------+

Número errado de argumentos


Passar o número errado de argumentos ou nenhum argumento resulta em um erro:
SELECT REGEXP_SUBSTR('Cat'); 

Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'REGEXP_SUBSTR'