ClickHouse/docs/fr/sql-reference/functions/string-search-functions.md

380 lines
19 KiB
Markdown
Raw Normal View History

2020-03-30 12:48:55 +00:00
---
machine_translated: true
2020-04-04 09:15:31 +00:00
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
toc_priority: 41
toc_title: "Pour Rechercher Des Cha\xEEnes"
2020-03-30 12:48:55 +00:00
---
# Fonctions De Recherche De chaînes {#functions-for-searching-strings}
2020-03-30 12:48:55 +00:00
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) {#position}
Renvoie la position (en octets) de la sous-chaîne trouvée dans la chaîne, à partir de 1.
Fonctionne sous lhypothèse que la chaîne de caractères contient un ensemble doctets représentant un octet texte codé. Si cette hypothèse nest pas remplie et quun caractère ne peut pas être représenté à laide dun seul octet, la fonction ne lance pas dexception 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.
2020-03-30 12:48:55 +00:00
Pour une recherche insensible à la casse, utilisez la fonction [positioncaseinsensible](#positioncaseinsensitive).
**Syntaxe**
``` sql
position(haystack, needle)
```
Alias: `locate(haystack, needle)`.
**Paramètre**
- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal).
- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal).
**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 na pas été trouvé.
2020-03-30 12:48:55 +00:00
Type: `Integer`.
**Exemple**
Phrase “Hello, world!” contient un ensemble doctets représentant un octet texte codé. La fonction renvoie un résultat attendu:
2020-03-30 12:48:55 +00:00
Requête:
``` sql
SELECT position('Hello, world!', '!')
```
Résultat:
``` text
┌─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](#positionutf8) fonction pour le texte codé sur plusieurs octets):
Requête:
``` sql
SELECT position('Привет, мир!', '!')
```
Résultat:
``` text
┌─position('Привет, мир!', '!')─┐
│ 21 │
└───────────────────────────────┘
```
## positioncaseinsensible {#positioncaseinsensitive}
Le même que [position](#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 lhypothèse que la chaîne de caractères contient un ensemble doctets représentant un octet texte codé. Si cette hypothèse nest pas remplie et quun caractère ne peut pas être représenté à laide dun seul octet, la fonction ne lance pas dexception 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.
2020-03-30 12:48:55 +00:00
**Syntaxe**
``` sql
positionCaseInsensitive(haystack, needle)
```
**Paramètre**
- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal).
- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal).
**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 na pas été trouvé.
2020-03-30 12:48:55 +00:00
Type: `Integer`.
**Exemple**
Requête:
``` sql
SELECT positionCaseInsensitive('Hello, world!', 'hello')
```
Résultat:
``` text
┌─positionCaseInsensitive('Hello, world!', 'hello')─┐
│ 1 │
└───────────────────────────────────────────────────┘
```
## positionUTF8 {#positionutf8}
Renvoie la position (en points Unicode) de la sous-chaîne trouvée dans la chaîne, à partir de 1.
Fonctionne sous lhypothèse que la chaîne contient un ensemble doctets représentant un texte codé en UTF-8. Si cette hypothèse nest pas remplie, la fonction ne lance pas dexception 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.
2020-03-30 12:48:55 +00:00
Pour une recherche insensible à la casse, utilisez la fonction [positionCaseInsensitiveUTF8](#positioncaseinsensitiveutf8).
**Syntaxe**
``` sql
positionUTF8(haystack, needle)
```
**Paramètre**
- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal).
- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal).
**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 na pas été trouvé.
2020-03-30 12:48:55 +00:00
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:
``` sql
SELECT positionUTF8('Привет, мир!', '!')
```
Résultat:
``` text
┌─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`:
``` sql
SELECT positionUTF8('Salut, étudiante!', '!')
```
Résultat:
``` text
┌─positionUTF8('Salut, étudiante!', '!')─┐
│ 17 │
└────────────────────────────────────────┘
```
Requête pour la lettre `é` qui est représenté deux points Unicode `U+0065U+0301`:
``` sql
SELECT positionUTF8('Salut, étudiante!', '!')
```
Résultat:
``` text
┌─positionUTF8('Salut, étudiante!', '!')─┐
│ 18 │
└────────────────────────────────────────┘
```
## positionCaseInsensitiveUTF8 {#positioncaseinsensitiveutf8}
Le même que [positionUTF8](#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 lhypothèse que la chaîne contient un ensemble doctets représentant un texte codé en UTF-8. Si cette hypothèse nest pas remplie, la fonction ne lance pas dexception 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.
2020-03-30 12:48:55 +00:00
**Syntaxe**
``` sql
positionCaseInsensitiveUTF8(haystack, needle)
```
**Paramètre**
- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal).
- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal).
**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 na pas été trouvé.
2020-03-30 12:48:55 +00:00
Type: `Integer`.
**Exemple**
Requête:
``` sql
SELECT positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')
```
Résultat:
``` text
┌─positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')─┐
│ 9 │
└────────────────────────────────────────────────────┘
```
## multirecherchallpositions {#multisearchallpositions}
Le même que [position](string-search-functions.md#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.
2020-03-30 12:48:55 +00:00
La recherche est effectuée sur des séquences doctets sans tenir compte de lencodage et du classement des chaînes.
2020-03-30 12:48:55 +00:00
- Pour une recherche ASCII insensible à la casse, utilisez la fonction `multiSearchAllPositionsCaseInsensitive`.
- Pour la recherche en UTF-8, Utilisez la fonction [multiSearchAllPositionsUTF8](#multiSearchAllPositionsUTF8).
- Pour la recherche UTF-8 insensible à la casse, utilisez la fonction multiSearchAllPositionsCaseInsensitiveutf8.
**Syntaxe**
``` sql
multiSearchAllPositions(haystack, [needle1, needle2, ..., needlen])
```
**Paramètre**
- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal).
- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal).
**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 nest pas trouvée.
2020-03-30 12:48:55 +00:00
**Exemple**
Requête:
``` sql
SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])
```
Résultat:
``` text
┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐
│ [0,13,0] │
└───────────────────────────────────────────────────────────────────┘
```
## multiSearchAllPositionsUTF8 {#multiSearchAllPositionsUTF8}
Voir `multiSearchAllPositions`.
## multiSearchFirstPosition(botte de foin, \[aiguille<sub>1</sub>, aiguille<sub>2</sub>, …, needle<sub>et</sub>\]) {#multisearchfirstposition}
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, \[aiguille<sub>1</sub>, aiguille<sub>2</sub>, …, needle<sub>et</sub>\]) {#multisearchfirstindexhaystack-needle1-needle2-needlen}
Renvoie lindex `i` (à partir de 1) de laiguille trouvée la plus à gauche<sub>je</sub> dans la chaîne `haystack` et 0 sinon.
2020-03-30 12:48:55 +00:00
Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8, multiSearchFirstIndexCaseInsensitiveUTF8`.
## multiSearchAny(botte de foin, \[aiguille<sub>1</sub>, aiguille<sub>2</sub>, …, needle<sub>et</sub>\]) {#function-multisearchany}
Renvoie 1, si au moins une aiguille de chaîne<sub>je</sub> 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 daiguilles doit être dau moins 2<sup>8</sup> en raison de la spécification de mise en œuvre.
2020-03-30 12:48:55 +00:00
## match (botte de foin, motif) {#matchhaystack-pattern}
Vérifie si la chaîne correspond au `pattern` expression régulière. Un `re2` expression régulière. Le [syntaxe](https://github.com/google/re2/wiki/Syntax) 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 lexpression 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.
2020-03-30 12:48:55 +00:00
Lexpression régulière travaille à la chaîne, comme si cest un ensemble doctets. Lexpression régulière ne peut pas contenir doctets nuls.
Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable Dutiliser LIKE ou position depuis ils travaillent beaucoup plus vite.
2020-03-30 12:48:55 +00:00
## multiMatchAny(botte de foin, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multimatchanyhaystack-pattern1-pattern2-patternn}
Le même que `match` mais renvoie 0 si aucune des expressions régulières sont appariés et 1 si lun des modèles les matchs. Il utilise [hyperscan](https://github.com/intel/hyperscan) bibliothèque. Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable dutiliser `multiSearchAny` comme cela fonctionne beaucoup plus vite.
2020-03-30 12:48:55 +00:00
!!! note "Note"
La longueur de lun des `haystack` la chaîne doit être inférieure à 2<sup>32</sup> octets sinon lexception est levée. Cette restriction a lieu en raison de lAPI hyperscan.
2020-03-30 12:48:55 +00:00
## multiMatchAnyIndex(botte de foin, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multimatchanyindexhaystack-pattern1-pattern2-patternn}
Le même que `multiMatchAny` mais retourne un index qui correspond à la botte de foin.
## multiMatchAllIndices(botte de foin, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multimatchallindiceshaystack-pattern1-pattern2-patternn}
Le même que `multiMatchAny`, mais renvoie le tableau de tous les indices qui correspondent à la botte de foin dans nimporte quel ordre.
2020-03-30 12:48:55 +00:00
## multiFuzzyMatchAny(botte de foin, distance, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multifuzzymatchanyhaystack-distance-pattern1-pattern2-patternn}
Le même que `multiMatchAny`, mais renvoie 1 si un motif correspond à la botte de foin dans une constante [distance dédition](https://en.wikipedia.org/wiki/Edit_distance). Cette fonction est également en mode expérimental et peut être extrêmement lente. Pour plus dinformations, voir [documentation hyperscan](https://intel.github.io/hyperscan/dev-reference/compilation.html#approximate-matching).
2020-03-30 12:48:55 +00:00
## multiFuzzyMatchAnyIndex(botte de foin, distance, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multifuzzymatchanyindexhaystack-distance-pattern1-pattern2-patternn}
Le même que `multiFuzzyMatchAny`, mais renvoie tout index qui correspond à la botte de foin à une distance dédition constante.
2020-03-30 12:48:55 +00:00
## multiFuzzyMatchAllIndices(botte de foin, distance, \[motif<sub>1</sub>, modèle<sub>2</sub>, …, pattern<sub>et</sub>\]) {#multifuzzymatchallindiceshaystack-distance-pattern1-pattern2-patternn}
Le même que `multiFuzzyMatchAny`, mais renvoie le tableau de tous les indices dans nimporte quel ordre qui correspond à la botte de foin à une distance dédition constante.
2020-03-30 12:48:55 +00:00
!!! 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) {#extracthaystack-pattern}
Extraits dun fragment dune chaîne à laide dune expression régulière. Si haystack ne correspond pas à l pattern regex, une chaîne vide est renvoyée. Si lexpression rationnelle ne contient pas de sous-modèles, elle prend le fragment qui correspond à lexpression rationnelle entière. Sinon, il prend le fragment qui correspond au premier sous-masque.
2020-03-30 12:48:55 +00:00
## extractAll(botte de foin, motif) {#extractallhaystack-pattern}
Extrait tous les fragments dune chaîne à laide dune 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 à lexpression rationnelle. En général, le comportement est le même que le extract fonction (il prend le premier sous-masque, ou lexpression entière sil ny a pas de sous-masque).
2020-03-30 12:48:55 +00:00
## comme (botte de foin, motif), botte de foin comme opérateur de motif {#function-like}
Vérifie si une chaîne correspond à une expression régulière simple.
Lexpression régulière peut contenir les métasymboles `%` et `_`.
2020-03-30 12:48:55 +00:00
`%` indique nimporte quelle quantité doctets (y compris zéro caractère).
2020-03-30 12:48:55 +00:00
`_` 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.
2020-03-30 12:48:55 +00:00
Pour les expressions régulières comme `%needle%`, le code est plus optimale et fonctionne aussi vite que le `position` fonction.
Pour dautres expressions régulières, le code est le même que pour la match fonction.
2020-03-30 12:48:55 +00:00
## notLike (botte de foin, motif), botte de foin pas comme opérateur de motif {#function-notlike}
La même chose que like mais négative.
## ngramDistance(botte de foin, aiguille) {#ngramdistancehaystack-needle}
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) {#ngramsearchhaystack-needle}
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 dun, le plus probable `needle` est dans le `haystack`. Peut être utile pour la recherche de chaîne floue.
2020-03-30 12:48:55 +00:00
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.
[Article Original](https://clickhouse.tech/docs/en/query_language/functions/string_search_functions/) <!--hide-->