MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trouver une chaîne dans une chaîne en SQL

La plupart des principaux SGBD nous permettent de trouver une chaîne dans une chaîne à l'aide de SQL. J'entends par là utiliser une requête SQL pour trouver la position d'une sous-chaîne dans une chaîne.

Il existe plusieurs fonctions SQL qui nous permettent de le faire, notamment INSTR() , LOCATE() , POSITION() , et CHARINDEX() . La fonction que vous utiliserez dépendra de votre SGBD et éventuellement si vous devez ou non spécifier une position de départ.

Oracle

Oracle a un INSTR() fonction qui renvoie la position de départ d'une sous-chaîne donnée dans une chaîne.

Exemple :

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

Résultat :

5

Cela nous montre que la sous-chaîne fat commence à la position 5 dans la chaîne Big fat cat .

Il est possible de spécifier une position de départ en passant un troisième argument. Nous pouvons également passer un quatrième argument pour spécifier quelle occurrence rechercher :

SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;

Résultat :

7

Dans ce cas, j'ai commencé la recherche à la position 1 et recherché la deuxième occurrence (en utilisant 2 comme quatrième argument).

Oracle a aussi un INSTRB() fonction qui fait la même chose, sauf qu'elle renvoie la position en octets.

MySQL

MySQL a un INSTR() fonction qui fait une chose similaire à la fonction du même nom d'Oracle Database :

SELECT INSTR('Cats and dogs like to run', 'dogs');

Résultat :

10

Cependant, si vous devez spécifier une position de départ, vous devrez utiliser soit LOCATE() ou POSITION() :

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6);

Résultat :

31

Ici, la première occurrence de cat commence à la position 5, mais j'ai spécifié que la recherche devait commencer à la position 6. Par conséquent, la position de la prochaine occurrence de cette chaîne était celle qui était renvoyée.

Notez que, bien que la recherche ait commencé à la position 6, la fonction renvoie toujours la position de la sous-chaîne dans la chaîne - pas à partir de la position de départ.

Le POSITION() la fonction est un synonyme de la syntaxe à deux arguments de LOCATE() , mais avec une syntaxe légèrement différente (POSITION() ne nous permet pas de spécifier une position de départ).

MySQL a aussi un REGEX_INSTR() fonction qui renvoie l'index de départ de la sous-chaîne de la chaîne qui correspond à l'expression régulière spécifiée par le modèle spécifié.

MariaDB

Comme MySQL, MariaDB a aussi un INSTR() fonction, ainsi qu'un un LOCATE() et POSITION() fonction :

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";

Résultat :

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

MariaDB a aussi un REGEX_INSTR() fonction qui renvoie l'index de départ de la sous-chaîne de la chaîne qui correspond à l'expression régulière spécifiée par le modèle spécifié.

SQL Server

En ce qui concerne SQL Server, le CHARINDEX() fonction est ce que nous recherchons :

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Résultat :

17

Dans ce cas, j'ai utilisé le troisième argument facultatif pour spécifier une position de départ.

SQL Server a également un PATINDEX() fonction qui recherche un motif dans une chaîne.

SQLite

SQLite a un INSTR() fonction pour satisfaire nos besoins :

SELECT INSTR('Black cat', 'lack');

Résultat :

2

PostgreSQL

Dans PostgreSQL, nous devons utiliser le POSITION() fonction :

SELECT POSITION('Break' IN 'Bangkok Breaking');

Résultat :

9