19 KiB
machine_translated |
---|
true |
Fonctions de recherche de chaînes
La recherche est sensible à la casse par défaut dans toutes ces fonctions. Il existe des variantes pour la recherche insensible à la casse.
position(botte de foin, aiguille), localiser( botte de foin, aiguille)
Renvoie la position (en octets) de la sous-chaîne trouvée dans la chaîne, à partir de 1.
Fonctionne sous l'hypothèse que la chaîne de caractères contient un ensemble d'octets représentant un octet texte codé. Si cette hypothèse n'est pas remplie et qu'un caractère ne peut pas être représenté à l'aide d'un seul octet, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux octets, il utilisera deux octets et ainsi de suite.
Pour une recherche insensible à la casse, utilisez la fonction positioncaseinsensible.
Syntaxe
position(haystack, needle)
Alias: locate(haystack, needle)
.
Paramètre
haystack
— string, in which substring will to be searched. Chaîne.needle
— substring to be searched. Chaîne.
Valeurs renvoyées
- Position de départ en octets (à partir de 1), si la sous-chaîne a été trouvée.
- 0, si la sous-chaîne n'a pas été trouvé.
Type: Integer
.
Exemple
Phrase “Hello, world!” contient un ensemble d'octets représentant un octet texte codé. La fonction renvoie un résultat attendu:
Requête:
SELECT position('Hello, world!', '!')
Résultat:
┌─position('Hello, world!', '!')─┐
│ 13 │
└────────────────────────────────┘
La même phrase en russe contient des caractères qui ne peuvent pas être représentés en utilisant un seul octet. La fonction renvoie un résultat inattendu (utilisation positionUTF8 fonction pour le texte codé sur plusieurs octets):
Requête:
SELECT position('Привет, мир!', '!')
Résultat:
┌─position('Привет, мир!', '!')─┐
│ 21 │
└───────────────────────────────┘
positioncaseinsensible
Le même que position renvoie la position (en octets) de la sous-chaîne trouvée dans la chaîne, à partir de 1. Utilisez la fonction pour une recherche insensible à la casse.
Fonctionne sous l'hypothèse que la chaîne de caractères contient un ensemble d'octets représentant un octet texte codé. Si cette hypothèse n'est pas remplie et qu'un caractère ne peut pas être représenté à l'aide d'un seul octet, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux octets, il utilisera deux octets et ainsi de suite.
Syntaxe
positionCaseInsensitive(haystack, needle)
Paramètre
haystack
— string, in which substring will to be searched. Chaîne.needle
— substring to be searched. Chaîne.
Valeurs renvoyées
- Position de départ en octets (à partir de 1), si la sous-chaîne a été trouvée.
- 0, si la sous-chaîne n'a pas été trouvé.
Type: Integer
.
Exemple
Requête:
SELECT positionCaseInsensitive('Hello, world!', 'hello')
Résultat:
┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│ 1 │
└───────────────────────────────────────────────────┘
positionUTF8
Renvoie la position (en points Unicode) de la sous-chaîne trouvée dans la chaîne, à partir de 1.
Fonctionne sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8. Si cette hypothèse n'est pas remplie, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux points Unicode, il en utilisera deux et ainsi de suite.
Pour une recherche insensible à la casse, utilisez la fonction positionCaseInsensitiveUTF8.
Syntaxe
positionUTF8(haystack, needle)
Paramètre
haystack
— string, in which substring will to be searched. Chaîne.needle
— substring to be searched. Chaîne.
Valeurs renvoyées
- Position de départ dans les points Unicode (à partir de 1), si la sous-chaîne a été trouvée.
- 0, si la sous-chaîne n'a pas été trouvé.
Type: Integer
.
Exemple
Phrase “Hello, world!” en russe contient un ensemble de points Unicode représentant un texte codé à un seul point. La fonction renvoie un résultat attendu:
Requête:
SELECT positionUTF8('Привет, мир!', '!')
Résultat:
┌─positionUTF8('Привет, мир!', '!')─┐
│ 12 │
└───────────────────────────────────┘
Phrase “Salut, étudiante!” où le caractère é
peut être représenté en utilisant un point (U+00E9
) ou deux points (U+0065U+0301
) la fonction peut être retournée un résultat inattendu:
Requête pour la lettre é
qui est représenté un point Unicode U+00E9
:
SELECT positionUTF8('Salut, étudiante!', '!')
Résultat:
┌─positionUTF8('Salut, étudiante!', '!')─┐
│ 17 │
└────────────────────────────────────────┘
Requête pour la lettre é
qui est représenté deux points Unicode U+0065U+0301
:
SELECT positionUTF8('Salut, étudiante!', '!')
Résultat:
┌─positionUTF8('Salut, étudiante!', '!')─┐
│ 18 │
└────────────────────────────────────────┘
positionCaseInsensitiveUTF8
Le même que positionUTF8 mais est sensible à la casse. Renvoie la position (en points Unicode) de la sous-chaîne trouvée dans la chaîne, à partir de 1.
Fonctionne sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8. Si cette hypothèse n'est pas remplie, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux points Unicode, il en utilisera deux et ainsi de suite.
Syntaxe
positionCaseInsensitiveUTF8(haystack, needle)
Paramètre
haystack
— string, in which substring will to be searched. Chaîne.needle
— substring to be searched. Chaîne.
Valeur renvoyée
- Position de départ dans les points Unicode (à partir de 1), si la sous-chaîne a été trouvée.
- 0, si la sous-chaîne n'a pas été trouvé.
Type: Integer
.
Exemple
Requête:
SELECT positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')
Résultat:
┌─positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')─┐
│ 9 │
└────────────────────────────────────────────────────┘
multirecherchallpositions
Le même que position mais les retours Array
des positions (en octets) des sous-chaînes correspondantes trouvées dans la chaîne. Les Positions sont indexées à partir de 1.
La recherche est effectuée sur des séquences d'octets sans tenir compte de l'encodage et du classement des chaînes.
- Pour une recherche ASCII insensible à la casse, utilisez la fonction
multiSearchAllPositionsCaseInsensitive
. - Pour la recherche en UTF-8, Utilisez la fonction multiSearchAllPositionsUTF8.
- Pour la recherche UTF-8 insensible à la casse, utilisez la fonction multiSearchAllPositionsCaseInsensitiveutf8.
Syntaxe
multiSearchAllPositions(haystack, [needle1, needle2, ..., needlen])
Paramètre
haystack
— string, in which substring will to be searched. Chaîne.needle
— substring to be searched. Chaîne.
Valeurs renvoyées
- Tableau de positions de départ en octets (à partir de 1), si la sous-chaîne correspondante a été trouvée et 0 si elle n'est pas trouvée.
Exemple
Requête:
SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])
Résultat:
┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0] │
└───────────────────────────────────────────────────────────────────┘
multiSearchAllPositionsUTF8
Voir multiSearchAllPositions
.
multiSearchFirstPosition(botte de foin, [aiguille1, aiguille2, …, needleet])
Le même que position
mais renvoie le décalage le plus à gauche de la chaîne haystack
et qui correspond à certains des aiguilles.
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions multiSearchFirstPositionCaseInsensitive, multiSearchFirstPositionUTF8, multiSearchFirstPositionCaseInsensitiveUTF8
.
multiSearchFirstIndex(botte de foin, [aiguille1, aiguille2, …, needleet])
Renvoie l'index i
(à partir de 1) de l'aiguille trouvée la plus à gaucheje dans la chaîne haystack
et 0 sinon.
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8, multiSearchFirstIndexCaseInsensitiveUTF8
.
multiSearchAny(botte de foin, [aiguille1, aiguille2, …, needleet])
Renvoie 1, si au moins une aiguille de chaîneje correspond à la chaîne haystack
et 0 sinon.
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions multiSearchAnyCaseInsensitive, multiSearchAnyUTF8, multiSearchAnyCaseInsensitiveUTF8
.
!!! note "Note"
Dans tous les multiSearch*
fonctions le nombre d'aiguilles doit être d'au moins 28 en raison de la spécification de mise en œuvre.
match (botte de foin, motif)
Vérifie si la chaîne correspond au pattern
expression régulière. Un re2
expression régulière. Le syntaxe de la re2
les expressions régulières sont plus limitées que la syntaxe des expressions régulières Perl.
Renvoie 0 si elle ne correspond pas, ou 1 si elle correspond.
Notez que le symbole antislash (\
) est utilisé pour s'échapper dans l'expression régulière. Le même symbole est utilisé pour échapper dans les littéraux de chaîne. Donc, pour échapper au symbole dans une expression régulière, vous devez écrire deux barres obliques inverses ( \ ) dans un littéral de chaîne.
L'expression régulière travaille à la chaîne, comme si c'est un ensemble d'octets. L'expression régulière ne peut pas contenir d'octets nuls. Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable D'utiliser LIKE ou ‘position’ depuis ils travaillent beaucoup plus vite.
multiMatchAny(botte de foin, [motif1, modèle2, …, patternet])
Le même que match
mais renvoie 0 si aucune des expressions régulières sont appariés et 1 si l'un des modèles les matchs. Il utilise hyperscan bibliothèque. Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable d'utiliser multiSearchAny
comme cela fonctionne beaucoup plus vite.
!!! note "Note"
La longueur de l'un des haystack
la chaîne doit être inférieure à 232 octets sinon l'exception est levée. Cette restriction a lieu en raison de l'API hyperscan.
multiMatchAnyIndex(botte de foin, [motif1, modèle2, …, patternet])
Le même que multiMatchAny
mais retourne un index qui correspond à la botte de foin.
multiMatchAllIndices(botte de foin, [motif1, modèle2, …, patternet])
Le même que multiMatchAny
, mais renvoie le tableau de tous les indices qui correspondent à la botte de foin dans n'importe quel ordre.
multiFuzzyMatchAny(botte de foin, distance, [motif1, modèle2, …, patternet])
Le même que multiMatchAny
, mais renvoie 1 si un motif correspond à la botte de foin dans une constante distance d'édition. Cette fonction est également en mode expérimental et peut être extrêmement lente. Pour plus d'informations, voir documentation hyperscan.
multiFuzzyMatchAnyIndex(botte de foin, distance, [motif1, modèle2, …, patternet])
Le même que multiFuzzyMatchAny
, mais renvoie tout index qui correspond à la botte de foin à une distance d'édition constante.
multiFuzzyMatchAllIndices(botte de foin, distance, [motif1, modèle2, …, patternet])
Le même que multiFuzzyMatchAny
, mais renvoie le tableau de tous les indices dans n'importe quel ordre qui correspond à la botte de foin à une distance d'édition constante.
!!! note "Note"
multiFuzzyMatch*
les fonctions ne prennent pas en charge les expressions régulières UTF-8, et ces expressions sont traitées comme des octets en raison de la restriction hyperscan.
!!! note "Note"
Pour désactiver toutes les fonctions qui utilisent hyperscan, utilisez le réglage SET allow_hyperscan = 0;
.
extrait(botte de foin, motif)
Extraits d'un fragment d'une chaîne à l'aide d'une expression régulière. Si ‘haystack’ ne correspond pas à l' ‘pattern’ regex, une chaîne vide est renvoyée. Si l'expression rationnelle ne contient pas de sous-modèles, elle prend le fragment qui correspond à l'expression rationnelle entière. Sinon, il prend le fragment qui correspond au premier sous-masque.
extractAll(botte de foin, motif)
Extrait tous les fragments d'une chaîne à l'aide d'une expression régulière. Si ‘haystack’ ne correspond pas à l' ‘pattern’ regex, une chaîne vide est renvoyée. Renvoie un tableau de chaînes composé de toutes les correspondances à l'expression rationnelle. En général, le comportement est le même que le ‘extract’ fonction (il prend le premier sous-masque, ou l'expression entière s'il n'y a pas de sous-masque).
comme (botte de foin, motif), botte de foin comme opérateur de motif
Vérifie si une chaîne correspond à une expression régulière simple.
L'expression régulière peut contenir les métasymboles %
et _
.
%
indique n'importe quelle quantité d'octets (y compris zéro caractère).
_
indique un octet.
Utilisez la barre oblique inverse (\
) pour échapper aux métasymboles. Voir la note sur l'échappement dans la description du ‘match’ fonction.
Pour les expressions régulières comme %needle%
, le code est plus optimale et fonctionne aussi vite que le position
fonction.
Pour d'autres expressions régulières, le code est le même que pour la ‘match’ fonction.
notLike (botte de foin, motif), botte de foin pas comme opérateur de motif
La même chose que ‘like’ mais négative.
ngramDistance(botte de foin, aiguille)
Calcule la distance de 4 grammes entre haystack
et needle
: counts the symmetric difference between two multisets of 4-grams and normalizes it by the sum of their cardinalities. Returns float number from 0 to 1 – the closer to zero, the more strings are similar to each other. If the constant needle
ou haystack
est plus de 32Kb, jette une exception. Si une partie de la non-constante haystack
ou needle
les chaînes sont plus que 32Kb, la distance est toujours un.
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8
.
ngramSearch(botte de foin, aiguille)
Même que ngramDistance
mais calcule la différence non symétrique entre needle
et haystack
– the number of n-grams from needle minus the common number of n-grams normalized by the number of needle
n-grammes. Le plus proche d'un, le plus probable needle
est dans le haystack
. Peut être utile pour la recherche de chaîne floue.
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8
.
!!! note "Note"
For UTF-8 case we use 3-gram distance. All these are not perfectly fair n-gram distances. We use 2-byte hashes to hash n-grams and then calculate the (non-)symmetric difference between these hash tables – collisions may occur. With UTF-8 case-insensitive format we do not use fair tolower
function – we zero the 5-th bit (starting from zero) of each codepoint byte and first bit of zeroth byte if bytes more than one – this works for Latin and mostly for all Cyrillic letters.