MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Encontre uma String dentro de uma String no SQL


A maioria dos principais SGBDs nos fornece uma maneira de encontrar uma string dentro de uma string usando SQL. Com isso, quero dizer usar uma consulta SQL para encontrar a posição de uma substring dentro de uma string.

Existem várias funções SQL que nos permitem fazer isso, incluindo INSTR() , LOCATE() , POSITION() e CHARINDEX() . A função que você usa dependerá do seu DBMS e, possivelmente, se você precisa ou não especificar uma posição inicial.

Oráculo


Oracle tem um INSTR() função que retorna a posição inicial de uma determinada substring dentro de uma string.

Exemplo:
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;

Resultado:
5

Isso nos mostra que a substring fat começa na posição 5 na string Big fat cat .

É possível especificar uma posição inicial passando um terceiro argumento. Também podemos passar um quarto argumento para especificar qual ocorrência encontrar:
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;

Resultado:
7

Neste caso eu iniciei a busca na posição 1 e procurou a segunda ocorrência (usando 2 como o quarto argumento).

Oracle também tem um INSTRB() função que faz algo semelhante, exceto que retorna a posição baseada em bytes.

MySQL


MySQL tem um INSTR() função que faz algo semelhante à função do banco de dados Oracle de mesmo nome:
SELECT INSTR('Cats and dogs like to run', 'dogs');

Resultado:
10

No entanto, se você precisar especificar uma posição inicial, precisará usar LOCATE() ou POSITION() :
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6);

Resultado:
31

Aqui, a primeira ocorrência de cat começa na posição 5, mas especifiquei a busca para iniciar na posição 6. Portanto, a posição da próxima ocorrência dessa string foi a que foi retornada.

Observe que, embora a pesquisa tenha começado na posição 6, a função ainda retorna a posição da substring dentro da string – não a partir da posição inicial.

A POSITION() função é um sinônimo para a sintaxe de dois argumentos de LOCATE() , mas com uma sintaxe ligeiramente diferente (POSITION() não nos permite especificar uma posição inicial).

MySQL também tem um REGEX_INSTR() função que retorna o índice inicial da substring da string que corresponde à expressão regular especificada pelo padrão especificado.

MariaDB


Assim como o MySQL, o MariaDB também possui um INSTR() função, bem como um um LOCATE() e POSITION() função:
SELECT 
    INSTR('No news is good news', 'news') AS "INSTR",
    POSITION('news' IN 'No news is good news') AS "POSITION",
    LOCATE('news', 'No news is good news') AS "LOCATE 1",
    LOCATE('news', 'No news is good news', 5) AS "LOCATE 2";

Resultado:
+-------+----------+----------+----------+
| INSTR | POSITION | LOCATE 1 | LOCATE 2 |
+-------+----------+----------+----------+
|     4 |        4 |        4 |       17 |
+-------+----------+----------+----------+

MariaDB também tem um REGEX_INSTR() função que retorna o índice inicial da substring da string que corresponde à expressão regular especificada pelo padrão especificado.

SQL Server


Quando se trata de SQL Server, o CHARINDEX() função é o que estamos procurando:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Resultado:
17

Nesse caso, usei o terceiro argumento opcional para especificar uma posição inicial.

SQL Server também tem um PATINDEX() função que procura um padrão dentro de uma string.

SQLite


SQLite tem um INSTR() função para satisfazer as nossas necessidades:
SELECT INSTR('Black cat', 'lack');

Resultado:
2

PostgreSQL


No PostgreSQL, precisamos usar o POSITION() função:
SELECT POSITION('Break' IN 'Bangkok Breaking');

Resultado:
9