Je veux filtrer des colonnes correspondant à un mot ou à une phrase spécifique. Par exemple, si j'ai choisi le mot anti
pour filtrer, parmi les lignes suivantes:
this is anti-pattern
antimosquitos products
the Word anti is cool
Je veux juste garder le dernier, car c'est le seul qui correspond à l'ensemble du modèle de correspondance dans son ensemble et non à un autre mot.
J'ai essayé d'utiliser RLIKE
et je reçois toujours une valeur FALSE
mais je ne comprends pas pourquoi. Je m'attendais à avoir une valeur TRUE
au moins dans l'une de ces déclarations SQL:
SELECT RLIKE ('Spray antimosquitos', '\bantimosquitos\b', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos\s', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos', 'i') as p1;
SELECT RLIKE ('Spray antimosquitos', '\santimosquitos', 'i') as p1;
Cependant, ce n'est pas le cas. J'ai essayé avec d'autres formes comme:
SELECT RLIKE ('Spray antimosquitos', '\b antimosquitos \b', 'i') as p1
SELECT RLIKE ('Spray antimosquitos', '*antimosquitos*', 'i') as p1
SELECT RLIKE ('Spray antimosquitos', ' antimosquitos ', 'i') as p1
Et je ne parviens pas à avoir une valeur retournée vraie.
Qu'est-ce qui ne va pas avec mon RLIM?
Tu dois
\t
pour l'onglet, \n
pour une alimentation en ligne, etc.)RLIKE
fonctionne. Il est généralement activé en ajoutant .*
aux deux extrémités du motif.Donc, dans votre cas, vous pouvez utiliser
'.*\\bantimosquitos\\b.*'
La fonction RLIME renvoie true uniquement si l'expression régulière correspond à la chaîne entière:
SELECT RLIKE('Spray anti mosquitos', 'anti') as p1; -- Returns FALSE because it doesn't match the whole string
SELECT RLIKE('Spray anti mosquitos', '.* anti .*'); -- Returns TRUE
Si vous souhaitez un véritable résultat sur une correspondance partielle, vous pouvez utiliser REGEXP_INSTR et voir si le résultat est> 0. Si oui, cela retournera vrai:
SELECT REGEXP_INSTR('Spray anti mosquitos', 'anti', 1, 1, 0, 'i') > 0 as p1; -- Returns TRUE