- Catégories :
Fonctions de chaîne et fonctions binaires (Recherche en texte intégral)
SEARCH¶
Recherche des données de caractères (texte) dans des colonnes spécifiées à partir d’une ou plusieurs tables, y compris dans les champs des colonnes VARIANT, OBJECT et ARRAY. Un analyseur de texte divise le texte en jetons, qui sont des unités de texte discrètes, telles que des mots ou des nombres. Un analyseur par défaut est appliqué si vous n’en spécifiez pas.
Pour plus d’informations sur l’utilisation de ces fonctions, voir Utilisation de la recherche en texte intégral.
Syntaxe¶
Arguments obligatoires¶
search_dataLes données que vous souhaitez rechercher, exprimées sous la forme d’une liste délimitée par des virgules de littéraux de chaîne, de noms de colonnes ou chemins vers les champs dans les colonnes VARIANT. Les données de recherche peuvent également être une chaîne littérale unique, ce qui peut être utile lorsque vous testez la fonction.
Vous pouvez spécifier le caractère générique (
*), où*s’étend à toutes les colonnes éligibles dans toutes les tables concernées par la fonction. Les colonnes éligibles sont celles qui ont les types de données VARCHAR (texte), VARIANT, ARRAY et OBJECT. Les données VARIANT, ARRAY et OBJECT sont converties en texte pour la recherche.Lorsque vous transmettez un caractère générique à la fonction, vous pouvez qualifier le caractère générique avec le nom ou l’alias de la table. Par exemple, pour transmettre toutes les colonnes de la table nommée
mytable, précisez les éléments suivants :Vous pouvez également utiliser les mots-clés ILIKE et EXCLUDE pour le filtrage :
ILIKE filtre les noms de colonnes qui correspondent au motif spécifié. Un seul motif est autorisé. Par exemple :
EXCLUDE filtre les noms de colonnes qui ne correspondent pas à la / aux colonnes spécifiées. Par exemple :
Les qualificatifs sont valides lorsque vous utilisez ces mots-clés. L’exemple suivant utilise le mot-clé ILIKE pour filtrer toutes les colonnes qui correspondent au motif
col1%dans la tablemytable:Les mots-clés ILIKE et EXCLUDE ne peuvent pas être combinés dans un seul appel de fonction.
Pour plus d’informations sur les mots-clés ILIKE et EXCLUDE, voir la section « Paramètres » dans SELECT.
Vous pouvez rechercher des colonnes dans plusieurs tables lorsque plusieurs tables sont concernées en joignant des tables ou en utilisant l’opérateur d’ensemble UNION. Pour rechercher toutes les colonnes dans la sortie d’une jointure ou d’une requête UNION, vous pouvez utiliser le caractère générique
*non qualifié comme suit :Pour rechercher des colonnes spécifiques lors de la jointure de tables, vous devrez peut-être qualifier les noms de colonnes (par exemple,
table2.colname). Vous pouvez également faire appel à un caractère générique*qualifié comme suit :Toutefois, vous ne pouvez pas spécifier
*outable.*plus d’une fois pour la fonction. Dans l’exemple de jointure précédent, vous ne pouvez pas spécifierSEARCH((T1.*, T2.*), 'string'). Cette syntaxe renvoie une erreur.Les parenthèses sont obligatoires pour l’argument
search_dataquand*,table.*ou plusieurs éléments sont listés. Par exemple :Si les parenthèses ne sont pas utilisées pour séparer plusieurs éléments, les virgules sont analysées comme des séparateurs entre les arguments de fonction.
Voir également Exemples de cas d’erreur prévus.
Vous pouvez rechercher des champs dans les données VARIANT en spécifiant le nom de la colonne, deux points ou un point et les sous-champs séparés par des points. Par exemple :
colname:fieldname.subfieldname. Pour plus d’informations sur la spécification des champs dans ces colonnes, voir Parcours de données semi-structurées.'search_string'Une chaîne VARCHAR contenant un ou plusieurs termes de recherche. Cet argument doit être une chaîne littérale ; les noms de colonnes ne sont pas pris en charge. Spécifiez une paire de guillemets simples autour de la chaîne entière. Ne mettez pas de guillemets autour de phrases ou termes individuels. Par exemple, utilisez :
'blue red green'N’utilisez pas :
'blue' 'red' 'green'La liste des termes peut être disjonctive ou conjonctive lorsque
ORouANDest défini pour l’argument SEARCH_MODE. Cependant, lorsque'NO_OP_ANALYZER'est utilisé, la chaîne de requête correspond exactement telle qu’elle est, sans tokenisation ni sémantique disjonctive ou conjonctive.Les recherches ne sont pas sensibles à la casse, sauf lorsque
'NO_OP_ANALYZER'est utilisé, donc une recherche du terme'ONCE'par rapport à la chaîne'Once upon a time'renvoie TRUE.Lorsque
ORouANDest défini pour l’argument SEARCH_MODE, l’ordre des termes de recherche n’a pas d’importance en ce qui concerne leur présence dans les données recherchées. LorsquePHRASEouEXACTest défini pour l’argument SEARCH_MODE, l’ordre des termes de recherche doit correspondre exactement aux données recherchées.
Arguments facultatifs¶
ANALYZER => 'analyzer_name'Le nom de l’analyseur de texte. Le nom doit être entre guillemets simples.
L’analyseur divise les termes de recherche (et le texte de la colonne recherchée) en jetons. La sémantique de correspondance (disjonctive, conjonctive, phrastique ou exacte) pour les jetons extraits de la chaîne de recherche et les jetons extraits des colonnes ou des champs recherchés dépend de la valeur de l’argument SEARCH_MODE.
L’analyseur tokenise une chaîne en la cassant là où il trouve certains délimiteurs. Ces délimiteurs ne sont pas inclus dans les jetons résultants et les jetons vides ne sont pas extraits.
Ce paramètre accepte une des valeurs suivantes :
'DEFAULT_ANALYZER'- divise le texte en jetons en fonction des délimiteurs suivants :Caractère
Code Unicode
Description
U+0020Espace
[U+005BCrochet gauche
]U+005DCrochet droit
;U+003BPoint-virgule
<U+003CSigne inférieur à
>U+003ESigne supérieur à
(U+0028Parenthèse gauche
)U+0029Parenthèse droite
{U+007BAccolade gauche
}U+007DAccolade droite
|U+007CBarre verticale
!U+0021Point d’exclamation
,U+002CVirgule
'U+0027Apostrophe
"U+0022Guillemets
*U+002AAstérisque
&U+0026Esperluette
?U+003FPoint d’interrogation
+U+002BSigne plus
/U+002FBarre oblique
:U+003ADeux-points
=U+003DSigne égal
@U+0040Arobase
.U+002EPoint (point final)
-U+002DTrait d’union
$U+0024Symbole du dollar
%U+0025Signe de pourcentage
\U+005CBarre oblique inverse
_U+005FTrait de soulignement (ligne basse)
\nU+000ANouvelle ligne (saut de ligne)
\rU+000DRetour chariot
\tU+0009Onglet horizontal
'UNICODE_ANALYZER'- tokenise en fonction des règles de segmentation Unicode qui traitent les espaces et certains caractères de ponctuation comme des délimiteurs. Ces règles internes sont conçues pour les recherches en langage naturel dans de nombreuses langues différentes. Par exemple, l’analyseur par défaut traite les périodes dans les adresses IP et les apostrophes dans les contractions comme délimiteurs, mais l’analyseur Unicode ne le fait pas. Voir Utiliser un analyseur pour ajuster le comportement de recherche.Pour plus d’informations sur l’algorithme de segmentation de texte Unicode, consultez https://unicode.org/reports/tr29/.
'NO_OP_ANALYZER'- ne tokenise ni les données ni la chaîne de requête. Un terme de recherche doit correspondre exactement au texte intégral d’une colonne ou d’un champ, y compris la sensibilité à la casse ; sinon, la fonction SEARCH renvoie FALSE. Même si la chaîne de requête semble contenir plusieurs jetons — par exemple,'sky blue'— la colonne ou le champ doit être exactement égal à la chaîne de requête entière. Dans ce cas, seulement'sky blue'est une correspondance ;'sky'et'blue'ne sont pas des correspondances.
Pour plus d’informations sur le comportement des différents analyseurs, voir Comment les termes de recherche sont tokenisés.
SEARCH_MODE => { 'OR' | 'AND' | 'PHRASE' | 'EXACT' }La sémantique utilisée par la recherche. Définissez cet argument sur l’une des valeurs suivantes :
'OR'- La fonction utilise la sémantique disjonctive. Il y a une correspondance si l’un ou l’autre des jetons extraits des colonnes ou des champs recherchés correspond à l’un ou l’autre des jetons extraits de la chaîne de recherche. Par exemple, si la valeursearch_stringest'blue red green', la fonction renvoie TRUE pour une ligne contenantblueORredORgreendans l’une des colonnes ou l’un des champs recherchés.'AND'- La fonction utilise la sémantique conjonctive. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent à tous les jetons extraits de la chaîne de recherche. Les jetons correspondants doivent tous se trouver dans une seule colonne ou un seul champ ; ils ne peuvent pas être répartis dans plusieurs colonnes ou champs. Par exemple, si la valeursearch_stringest'blue red green', la fonction renvoie TRUE pour une ligne contenantblueANDredANDgreendans au moins l’une des colonnes ou l’un des champs recherchés.'PHRASE'- La fonction utilise la sémantique de correspondance des phrases. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent à tous les jetons extraits de la chaîne de recherche, y compris l’ordre et l’adéquation des jetons.La sémantique de correspondance est la même que la sémantique conjonctive, à l’exception des différences suivantes :
L’ordre des jetons doit correspondre exactement. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie FALSE pourred,green,blue.Aucun jeton supplémentaire ne peut être intercalé dans les données de recherche. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie FALSE pourblue,yellow,red,green.
'EXACT'- La fonction utilise la sémantique de correspondance exacte. Il y a correspondance si les jetons extraits d’au moins une des colonnes ou un des champs recherchés correspondent exactement à tous les jetons extraits de la chaîne de recherche, y compris les délimiteurs.Les règles de correspondance sont les mêmes que pour la sémantique de recherche de phrases, à l’exception des différences suivantes :
Les chaînes de délimiteurs entre les jetons doivent correspondre exactement. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie TRUE pour une ligne contenantblue,red,greendans au moins l’une des colonnes ou l’un des champs recherchés. La fonction renvoie FALSE pour les variations telles queblue|red| greenoublue, red, green.Lorsqu’un délimiteur est le premier ou le dernier caractère de la valeur
search_string, le délimiteur est traité comme un caractère pour la correspondance. Par conséquent, les délimiteurs à gauche et à droite du premier et du dernier délimiteur peuvent entraîner une correspondance. Par exemple, si la valeursearch_stringest'[blue]', la fonction renvoie TRUE pourfoo [blue] bar,[[blue]]et=[blue]., mais pas pour(blue)oufoo blue bar.
Pour tous les modes de recherche, la chaîne doit être délimitée par un symbole délimiteur à gauche et à droite. Par exemple, si la valeur
search_stringest'blue,red,green', la fonction renvoie TRUE pour-blue,red,green;. La fonction renvoie FALSE pourdarkblue,red,greenoublue,red,greenish.Si vous utilisez le
UNICODE_ANALYZER, la sémantique de correspondance exacte n’est pas prise en charge. Vous pouvez utiliserDEFAULT_ANALYZERouNO_OP_ANALYZERavec une sémantique de correspondance exacte, mais généralement ces sémantiques de recherche conviennent mieux àDEFAULT_ANALYZER.Une recherche qui utilise la sémantique de correspondance exacte avec
DEFAULT_ANALYZERse comporte différemment d’une recherche d’égalité ou d’une recherche de texte intégral avecNO_OP_ANALYZERdes manières suivantes :Une recherche d’égalité correspond aux lignes où la valeur de la colonne est exactement la même que dans le prédicat (y compris la casse), sans texte supplémentaire entourant l’occurrence de la chaîne de recherche.
Une recherche en texte intégral avec
NO_OP_ANALYZERest similaire à une recherche d’égalité dans la mesure où il est sensible à la casse et n’autorise pas de texte supplémentaire.Une recherche avec une sémantique de correspondance exacte avec
DEFAULT_ANALYZERtokenise les valeurs de colonne. Il autorise des jetons supplémentaires à gauche et à droite de l’occurrence de la chaîne de recherche, à condition qu’ils soient séparés par des délimiteurs de jetons. La recherche est insensible à la casse.
Par défaut :
'OR'
Renvoie¶
Renvoie une valeur BOOLEAN :
La valeur est TRUE si les jetons
search_stringcorrespondent aux jetonssearch_datasur la base de la sémantique spécifiée dans l’argument SEARCH_MODE.Renvoie NULL si l’un de ces arguments est NULL.
Sinon, renvoie FALSE.
Notes sur l’utilisation¶
La fonction SEARCH fonctionne uniquement sur les données VARCHAR, VARIANT, ARRAY et OBJECT. La fonction renvoie une erreur si l’argument
search_datane contient pas de données de ces types de données. Lorsque l’argumentsearch_datainclut des données des types de données pris en charge et des types de données non pris en charge, la fonction recherche les données des types de données pris en charge et ignore silencieusement les données des types de données non pris en charge. Pour des exemples, voir Exemples de cas d’erreur prévus.Vous pouvez ajouter une optimisation FULL_TEXT de la recherche sur les colonnes qui sont la cible d’appels de fonction SEARCH à l’aide d’une commande ALTER TABLE. Par exemple :
Pour plus d’informations, voir activer l’optimisation de la recherche FULL_TEXT.
Comment les termes de recherche sont tokenisés¶
La table suivante montre quelques exemples de la manière dont les termes de recherche d’entrée sont divisés en jetons, ce qui dépend des règles appliquées par l’analyseur utilisé. Dans le tableau, les virgules indiquent où les jetons sont divisés (si c’est le cas).
Terme(s) de recherche |
Jetons : DEFAULT_ANALYZER |
Jetons : UNICODE_ANALYZER |
NO_OP_ANALYZER (non divisé) |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemples¶
Les exemples suivants montrent différentes manières d’utiliser la fonction SEARCH, en commençant par une utilisation simple et en progressant vers des cas d’utilisation plus complexes :
Recherche générique sur toutes les colonnes éligibles dans une table
Recherche générique sur les colonnes éligibles dans les tables jointes
Recherche de lignes correspondant à plusieurs chaînes de recherche
Utiliser un analyseur pour ajuster le comportement de recherche
Pour exécuter les requêtes de plusieurs exemples, commencez par créer les données d’échantillon pour la fonction SEARCH.
Correspondance avec un littéral¶
L’exemple le plus simple de la fonction SEARCH est un test pour TRUE ou FALSE sur une chaîne littérale. Le premier exemple renvoie TRUE parce que les littéraux des premier et deuxième arguments correspondent, étant donné que la comparaison n’est pas sensible à la casse.
Le deuxième exemple renvoie FALSE parce que le jeton 32 n’apparaît pas dans le littéral 5.1.33 spécifié pour le premier argument.
Correspondance avec une référence de colonne¶
Cet exemple utilise une colonne d’une table comme premier argument. La fonction renvoie TRUE parce que l’un des termes de recherche (king) existe dans la colonne character. La liste des termes est disjonctive car la valeur par défaut de l’argument SEARCH_MODE est 'OR'. (Pour plus d’informations sur la table utilisée ici et dans certains exemples ultérieurs, voir Création des données d’échantillon pour SEARCH.)
L’exemple suivant est similaire à l’exemple précédent, mais la sémantique de recherche est conjonctive car l’argument SEARCH_MODE est défini sur 'AND'. La fonction renvoie FALSE car un seul des termes recherchés (king) existe dans la colonne character. Le terme queen n’apparaît pas dans les données de recherche.
Recherche de clause WHERE sur une colonne¶
La requête suivante utilise la fonction SEARCH pour trouver les lignes qui contiennent le mot wherefore dans la colonne line :
Recherche de clause WHERE sur plusieurs colonnes¶
La requête suivante utilise la fonction SEARCH pour trouver les lignes qui contiennent le mot king dans la colonne play, la colonne character ou les deux colonnes. Les parenthèses sont obligatoires pour le premier argument.
Recherche générique sur toutes les colonnes éligibles dans une table¶
Vous pouvez utiliser le caractère * (ou table.*) comme premier argument de la fonction SEARCH, comme illustré dans cet exemple. La recherche s’effectue sur toutes les colonnes éligibles dans le tableau que vous sélectionnez, qui dans ce cas est la table lines.
La table lines comporte quatre colonnes dont les types de données sont pris en charge par la fonction de recherche. Le résultat est constitué de lignes où king apparaît dans une ou plusieurs des quatre colonnes recherchées. Pour l’une de ces colonnes, act_scene_line, la fonction ne trouve aucune correspondance, mais les trois autres colonnes ont toutes des correspondances. L’argument SEARCH_MODE est défini par défaut sur 'OR'.
Vous pouvez également utiliser les mots-clés ILIKE et EXCLUDE pour le filtrage. Pour plus d’informations sur ces mots-clés, voir SELECT.
Cette recherche utilise le mot-clé ILIKE pour rechercher uniquement dans les colonnes qui se terminent par la chaîne line. La fonction effectue donc une recherche dans les colonnes line et act_scene_line.
Cette recherche utilise le mot-clé EXCLUDE pour que la fonction ne recherche pas les données dans la colonne character.
Recherche générique dans une liste SELECT¶
Vous pouvez utiliser le caractère * (ou table.*) dans une liste SELECT, comme le montrent ces exemples.
La recherche suivante s’effectue sur toutes les colonnes éligibles dans le tableau que vous sélectionnez, qui dans ce cas est la table lines. La recherche renvoie TRUE lorsque king apparaît dans une ou plusieurs des quatre colonnes recherchées. L’argument SEARCH_MODE est défini par défaut sur 'OR'.
Vous pouvez également utiliser les mots-clés ILIKE et EXCLUDE pour le filtrage. Pour plus d’informations sur ces mots-clés, voir SELECT.
Cette recherche utilise le mot-clé ILIKE pour rechercher uniquement dans les colonnes qui se terminent par la chaîne line. La fonction effectue donc une recherche dans les colonnes line et act_scene_line.
Cette recherche utilise le mot-clé EXCLUDE pour que la fonction ne recherche pas les données dans les colonnes play ou line.
Recherche générique sur les colonnes éligibles dans les tables jointes¶
Cet exemple utilise deux petites tables contenant des informations sur les modèles de voitures. La table t1 a deux colonnes de caractères et une table t2 en a trois. Vous pouvez créer et charger les tables comme suit :
Les résultats des deux requêtes suivantes diffèrent, étant donné la recherche sur t1.* et t2.*. Seulement deux colonnes de t1 sont admissibles à la recherche, contre trois colonnes pour t2.
Recherche générique sur la sortie d’une sous-requête UNION¶
L’exemple suivant utilise les deux mêmes tables que l’exemple précédent. Dans ce cas, la recherche est appliquée à toutes les colonnes éligibles de t3, qui est la table qui résulte de la sous-requête. La sous-requête calcule la valeur UNION des trois premières colonnes de t1 et t2 (cinq lignes). La recherche renvoie deux lignes correspondantes du résultat UNION.
Recherche de lignes correspondant à plusieurs chaînes de recherche¶
L’exemple suivant utilise l’argument SEARCH_MODE pour spécifier une sémantique conjonctive qui trouve une correspondance lorsque les deux termes de recherche apparaissent ensemble dans la même colonne. Pour utiliser la sémantique conjonctive, vous devez donner à l’argument SEARCH_MODE la valeur 'AND'.
Lorsque vous utilisez la sémantique conjonctive, les deux termes de recherche doivent correspondre dans la même colonne. Par exemple, la requête suivante ne renvoie aucun résultat car les termes KING et Rosencrantz n’apparaissent dans la même colonne sur aucune ligne des données de recherche.
Une requête similaire qui utilise la sémantique disjonctive (par défaut) en définissant l’argument SEARCH_MODE sur 'OR' trouve des correspondances dans les données de recherche.
Recherche de lignes à l’aide de la sémantique de correspondance de phrases et de correspondance exacte¶
Vous pouvez utiliser la sémantique de correspondance de phrases et de correspondance exacte pour des cas d’utilisation similaires mais légèrement différents :
Utilisez la sémantique de correspondance de phrases lorsque les mots et leur ordre doivent correspondre exactement, mais qu’il peut y avoir des différences dans les délimiteurs et l’espace entre les mots. Pour utiliser la sémantique de correspondance de phrases, définissez l’argument SEARCH_MODE sur
'PHRASE'.Utilisez la sémantique de correspondance exacte lorsque les mots, l’ordre des mots, les délimiteurs entre les mots et l’espace entre les mots doivent correspondre exactement. Pour utiliser la sémantique de correspondance exacte, définissez l’argument SEARCH_MODE sur
'EXACT'.
L’exemple suivant utilise la sémantique de correspondance de phrases pour trouver une correspondance exacte de texte dans une chaîne de texte plus longue, mais le texte de recherche comporte des délimiteurs différents et des espaces supplémentaires entre les mots :
L’exemple suivant est le même que l’exemple précédent, sauf qu’il utilise la sémantique de correspondance exacte pour trouver une correspondance exacte de texte dans une chaîne de texte plus longue :
Les cas d’utilisation courants de la sémantique de correspondance de phrases et de correspondance exacte incluent la recherche d’adresses e-mail, d’URLs et de numéros de téléphone. Pour les exemples suivants, créez une table avec une ligne de données d’échantillon :
L’exemple suivant exécute une requête qui utilise la sémantique conjonctive pour rechercher les données des e-mails en définissant l’argument SEARCH_MODE sur 'AND' dans la première recherche, la sémantique de correspondance de phrases dans la deuxième recherche, et la sémantique de correspondance exacte dans la troisième recherche :
La sortie affiche les résultats suivants :
La recherche
ANDrenvoie TRUE même si les termesjohn,robertetdoesont dans un ordre différent dans la chaîne de recherche et les données de recherche.Les recherches
PHRASEetEXACTrenvoient FALSE car les termes de recherche ne correspondent pas à l’ordre de la chaîne de recherche.
L’exemple suivant exécute une requête qui utilise la sémantique conjonctive pour rechercher les données des e-mails en définissant l’argument SEARCH_MODE sur 'AND' dans la première recherche, la sémantique de correspondance de phrases dans la deuxième recherche, et la sémantique de correspondance exacte dans la troisième recherche :
La sortie affiche les résultats suivants :
La recherche
ANDrenvoie TRUE même si le jeton supplémentairerobertest intercalé dans les données de recherche.Les recherches
PHRASEetEXACTrenvoient FALSE car cette sémantique de recherche ne trouve pas de correspondance lorsque des jetons supplémentaires sont intercalés dans les données de recherche.
L’exemple suivant exécute une requête qui utilise la sémantique de recherche de phrases pour rechercher les données d’e-mails dans la première recherche et la sémantique de correspondance exacte dans la deuxième recherche :
La sortie montre que la recherche PHRASE renvoie TRUE même si les délimiteurs de l’adresse e-mail dans la chaîne de recherche sont des traits d’union au lieu de points entre john, robert et doe. La recherche EXACT renvoie FALSE car, avec une sémantique de correspondance exacte, les délimiteurs de la chaîne de recherche doivent correspondre exactement aux données de recherche :
L’exemple suivant exécute une requête qui utilise la sémantique de recherche de phrases pour rechercher les données d’URL dans la première recherche et la sémantique de correspondance exacte dans la deuxième recherche :
La sortie montre que la recherche PHRASE renvoie TRUE même si le délimiteur dans l’URL de la chaîne de recherche est un tiret bas au lieu d’un point dans l’ID de produit. La recherche EXACT renvoie FALSE :
L’exemple suivant exécute une requête qui utilise la sémantique de recherche de phrases pour rechercher les données de numéro de téléphone lors de la première recherche et la sémantique de correspondance exacte dans la deuxième recherche :
La sortie montre que la recherche PHRASE renvoie TRUE même si les délimiteurs du numéro de téléphone dans la chaîne de recherche sont des points au lieu de traits d’union. La recherche EXACT renvoie FALSE :
Les exemples suivants utilisent la fonction SEARCH dans une clause WHERE pour interroger la table phrase_exact_search_samples. Tout d’abord, insérez une autre ligne dans la table :
L’exemple suivant recherche une correspondance exacte du numéro de téléphone 800-555-0100 dans les données de la table :
L’exemple suivant est le même que l’exemple précédent, mais il utilise une sémantique disjonctive au lieu d’une sémantique de correspondance exacte, de sorte que tout numéro de téléphone contenant un 800 ou 555 est une correspondance :
Recherche de données VARIANT et VARCHAR dans une jointure¶
L’exemple suivant montre une jointure de deux tables, car_rentals et car_sales, avec la recherche appliquée aux colonnes des deux tables. La table car_sales contient des données VARIANT. La table car_sales et ses données sont décrites sous Interrogation de données semi-structurées. Les instructions SQL suivantes créent la table car_rentals et y insèrent des données :
Exécutez la requête :
Dans ce deuxième exemple, sur les mêmes données, différents termes de recherche sont utilisés :
Utiliser un analyseur pour ajuster le comportement de recherche¶
Les exemples suivants montrent comment ajuster le comportement de la fonction SEARCH en spécifiant un analyseur autre que celui par défaut : 'UNICODE_ANALYZER' ou 'NO_OP_ANALYZER'.
Le premier exemple utilise 'NO_OP_ANALYZER' pour tester si la chaîne 1.2.500 correspond exactement au contenu de la colonne act_scene_line pour n’importe quelle ligne dans la table lines. Deux lignes sont éligibles à la recherche.
Si vous supprimez 'NO_OP_ANALYZER' en tant qu’argument de la fonction pour cet exemple, la recherche renvoie un grand nombre de lignes. L’analyseur par défaut traite 1, 2 et 500 comme des jetons distincts ; par conséquent, la fonction renvoie TRUE pour toutes les lignes où 1, 2 ou 500 existent dans n’importe quel ordre ou combinaison.
Si vous modifiez cette requête pour inclure uniquement le préfixe 1.2 pour le deuxième argument, l’analyseur par défaut renvoie TRUE, mais 'UNICODE_ANALYZER' et 'NO_OP_ANALYZER' renvoient tous les deux FALSE. L’analyseur par défaut traite les périodes dans ces valeurs comme des délimiteurs, mais l’analyseur Unicode ne le fait pas.
Les deux requêtes suivantes montrent un autre effet de l’utilisation de 'UNICODE_ANALYZER' au lieu de l’analyseur par défaut. La première requête, utilisant 'UNICODE_ANALYZER', ne renvoie qu’une seule ligne. Le guillemet simple supplémentaire dans le deuxième argument est là pour échapper au guillemet simple pour l’apostrophe. Voir Constantes de chaîne entre guillemets simples.
La deuxième requête, utilisant l’analyseur par défaut, renvoie quatre lignes car l’analyseur par défaut traite le caractère apostrophe comme un délimiteur. Toute chaîne contenant la lettre « s » comme jeton est éligible à la recherche. Dans cet exemple, la fonction renvoie TRUE pour chaque chaîne contenant une « apostrophe s » ('s).
Exemples de cas d’erreur prévus¶
Les exemples suivants montrent des requêtes qui renvoient des erreurs de syntaxe attendues.
Cet exemple échoue parce que 5 n’est pas un type de données pris en charge pour l’argument search_string.
Cet exemple échoue car aucune colonne d’un type de données pris en charge n’est spécifiée pour l’argument search_data.
Cet exemple réussit car il existe une colonne d’un type de données pris en charge spécifié pour l’argument search_data. La fonction ignore la colonne line_id car ce n’est pas un type de données pris en charge
Cet exemple échoue car plusieurs littéraux de chaîne sont listés pour le premier argument, sans parenthèses, ce qui entraîne des arguments incompatibles :
Cet exemple échoue car plusieurs noms de colonnes sont listés pour le premier argument, sans parenthèses, ce qui entraîne trop d’arguments :
Cet exemple échoue car un nom de colonne n’est pas accepté comme argument de chaîne de recherche.
Création des données d’échantillon pour SEARCH¶
Certains des exemples de cette section interrogent une table contenant du texte provenant de pièces de Shakespeare. Chaque ligne de texte est stockée dans une seule ligne de la table. D’autres colonnes identifient le nom de la pièce, le nom du personnage, etc. La table lines a la structure suivante :
Par exemple, une seule ligne dans cette table ressemble à ceci :
Si vous souhaitez exécuter les exemples de cette section, créez cette table en exécutant les commandes suivantes :