Cette section décrit :
les fonctions et opérateurs pour traiter et créer des données JSON
le langage de chemin SQL/JSON
Pour en savoir plus sur le standard SQL/JSON, voir [sqltr-19075-6]. Pour des détails sur les types JSON supportés dans PostgreSQL, voir Section 8.14.
Tableau 9.45 affiche les opérateurs
disponibles pour les types de données JSON (voir Section 8.14). De plus, les opérateurs de comparaison
habituels indiqués dans Tableau 9.1
sont disponibles pour le type jsonb
, mais pas pour le type
json
. Les opérateurs de comparaison suivent les rÚgles de tri
des opérateurs B-tree indiqués dans Section 8.14.4.
Voir aussi Section 9.21 pour la fonction
d'agrégat json_agg
qui agrĂšge les valeurs
d'enregistrements sous la forme d'un JSON, pour la fonction d'agrégat
json_object_agg
qui agrĂšge des paires de valeurs dans
un objet JSON, et leurs équivalents jsonb
, Ă savoir
jsonb_agg
et jsonb_object_agg
.
Tableau 9.45. Opérateurs json
et jsonb
Opérateur Description Exemple(s) |
---|
Extrait le
|
Extrait le champ objet JSON avec la clé donnée.
|
Extrait le
|
Extrait le champ objet JSON d'aprÚs la clé donnée, comme
|
Extrait le sous-objet JSON d'un chemin spĂ©cifiĂ©, oĂč les Ă©lĂ©ments du chemin peuvent ĂȘtre soit les clĂ©s d'un champ, soit les indices d'un tableau.
|
Extrait le sous-objet JSON au chemin spécifié avec
|
Les opĂ©rateurs d'extraction champ/Ă©lĂ©ment/chemin renvoient NULL, plutĂŽt qu'une erreur, si l'entrĂ©e JSON n'a pas la bonne structure correspondant Ă la requĂȘte ; par exemple si la clĂ© ou l'Ă©lĂ©ment du tableau n'existe pas.
Quelques opérateurs supplémentaires existent seulement pour le type
jsonb
, comme indiqué dans Tableau 9.46. Section 8.14.4
dĂ©crit comment ces opĂ©rateurs peuvent ĂȘtre utilisĂ©s pour rechercher
efficacement les données jsonb
indexées.
Tableau 9.46. Opérateurs jsonb
supplémentaires
Opérateur Description Exemple(s) |
---|
Est-ce que la premiÚre valeur JSON contient la seconde ? (Voir Section 8.14.3 pour les détails sur la notion de contenu.)
|
Est-ce que la premiĂšre valeur JSON est contenue dans la seconde ?
|
Est-ce que la chaßne de caractÚres existe comme clé de haut niveau ou élément de tableau dans la valeur JSON ?
|
Est-ce qu'une des chaßnes du tableau de texte existe comme clé de haut niveau ou comme élément de tableau ?
|
Est-ce que toutes les chaßnes du tableau de texte existent comme clés de haut niveau ou comme éléments de tableau ?
|
ConcatĂšne deux valeurs
Pour concaténer un tableau à un autre tableau dans une entrée unique, il faut l'envelopper dans une couche supplémentaire de tableau, par exemple :
|
Supprime une clé (et sa valeur) à partir d'un objet JSON, ou les valeurs correspondantes de chaßnes à partir d'un tableau JSON.
|
Supprime toutes les clés ou tous les éléments de tableau correspondant à partir de l'opérande gauche.
|
Supprime l'élément de tableau pour l'index spécifié (les nombres négatifs se décomptent à partir de la fin). Renvoie une erreur si la valeur JSON n'est pas un tableau.
|
Supprime le champ ou l'Ă©lĂ©ment de tableau sur le chemin indiquĂ©, les Ă©lĂ©ments du chemin pouvant ĂȘtre soit des clĂ©s de champ, soit des indices de tableau.
|
Est-ce que le chemin JSON renvoie tout élément pour la valeur JSON spécifiée ?
|
Renvoie le résultat d'une vérification de prédicat du chemin JSON pour
la valeur JSON indiquée. Seul le premier élément du résultat est pris
en compte. Si le résultat n'est pas un booléen, alors
|
Les opérateurs @?
et @@
du type
jsonpath
suppriment les erreurs suivantes : champ objet
ou élément de tableau manquant, type d'élément JSON inattendu, erreurs de
date/heure ou de numĂ©rique. Les fonctions relatives Ă
jsonpath
décrites ci-dessous peuvent aussi supprimer ce type
d'erreurs Ă la demande. Ce comportement pourrait ĂȘtre utile lors de la
recherche de collections de documents JSON de différentes structures.
Tableau 9.47 montre les fonctions
disponibles pour construire des valeurs json
et
jsonb
.
Tableau 9.47. Fonctions de création de JSON
Fonction Description Exemple(s) |
---|
Convertit toute valeur SQL en
|
Convertit un tableau SQL en tableau JSON. Le comportement est le mĂȘme
que
|
Convertit une valeur composite SQL en objet JSON. Le comportement est
le mĂȘme que
|
Construit un tableau JSON avec des types potentiellement hĂ©tĂ©rogĂšnes Ă
partir d'une liste d'arguments de longueur variable. Chaque argument
est converti avec la fonction
|
Construit un objet JSON Ă partir d'une liste d'arguments de longueur
indéfinie. Par convention, la liste d'arguments consiste en des clés
et valeurs en alternance. Les arguments clés sont convertis en
texte ; les arguments valeurs sont convertis via les fonctions
|
Construit un objet JSON à partir d'un tableau de texte. Le tableau doit avoir soit exactement une dimension avec un nombre pair de membres, auquel cas ils sont pris comme des paires alternantes clé/valeur, ou deux dimensions de telle façon que le tableau interne a exactement deux éléments, pris comme une paire clé/valeur. Toutes les valeurs sont converties en chaßne JSON.
|
Cette forme de
|
Tableau 9.48 montre les fonctions
disponibles pour le traitement de valeurs json
et
jsonb
.
Tableau 9.48. Fonctions de traitement JSON
Fonction Description Exemple(s) |
---|
Ătend le tableau JSON de haut niveau en un ensemble de valeurs JSON.
value ----------- 1 true [2,false]
|
Ătend le tableau JSON de haut niveau en un ensemble de valeurs de type
value ----------- foo bar
|
Renvoie le nombre d'éléments dans le tableau JSON de haut niveau.
|
Ătend l'objet JSON de haut niveau en un ensemble de paires clĂ©/valeur.
key | value -----+------- a | "foo" b | "bar"
|
Ătend l'objet JSON de haut niveau en un ensemble de paires clĂ©/valeur.
Les
key | value -----+------- a | foo b | bar
|
Extrait un sous-objet JSON au chemin spécifié. (Ceci est
fonctionnellement équivalent à l'opérateur
|
Extrait le sous-objet JSON au chemin spécifié sous la forme d'un
|
Renvoie l'ensemble de clés dans l'objet JSON de haut niveau.
json_object_keys ------------------ f1 f2
|
Ătend l'objet JSON de haut niveau en une ligne ayant le type composite
de l'argument Pour convertir une valeur JSON au type SQL d'une colonne en sortie, les rÚgles suivantes sont appliquées sur cette séquence :
Bien que l'exemple ci-dessous utilise une valeur constante JSON, une
utilisation typique serait de référencer une colonne
a | b | c ---+-----------+------------- 1 | {2,"a b"} | (4,"a b c")
|
Ătend le tableau JSON de haut niveau composĂ© d'objets en un ensemble
de lignes ayant le type composite de l'argument
a | b ---+--- 1 | 2 3 | 4
|
Ătend l'objet JSON de haut niveau en une ligne ayant le type composite
défini par une clause
a | b | c | d | r ---+---------+---------+---+--------------- 1 | [1,2,3] | {1,2,3} | | (123,"a b c")
|
Ătend le tableau JSON de haut niveau composĂ© d'objets en un ensemble
de lignes ayant le type composite défini par une clause
a | b ---+----- 1 | foo 2 |
|
Renvoie
|
Si
|
Renvoie
|
Supprime tous les champs objets ayant des valeurs NULL à partir de la valeur JSON donnée, de façon récurvise. Les valeurs NULL qui ne sont pas des champs objets ne sont pas touchées.
|
Vérifie si le chemin JSON renvoie des éléments de la valeur JSON
spécifiée. Si l'argument
|
Renvoie le résultat de la vérification d'un prédicat de chemin JSON
pour la valeur JSON spécifiée. Seul le premier élément du résultat est
pris en compte. Si le résultat n'est pas un booléen, alors
|
Renvoie tous les éléments JSON renvoyés par le chemin JSON pour la
valeur JSON spécifiée. Les arguments optionnels
jsonb_path_query ------------------ 2 3 4
|
Renvoie tous les éléments JSON renvoyés par le chemin JSON pour la
valeur JSON spécifiée, sous la forme d'un tableau JSON. Les arguments
optionnels
|
Renvoie le premier élément JSON renvoyé par le chemin JSON pour la
valeur JSON spécifiée. Renvoie
|
Ces fonctions agissent comme leurs homologues décrits ci-dessus sans
le suffixe
|
Convertit la valeur JSON donnée en un texte proprement indenté.
[ { "f1": 1, "f2": null }, 2 ]
|
Renvoie le type de la valeur JSON de haut niveau sous la forme d'une
chaĂźne de caractĂšres. Les types possibles sont
|
Les expressions de chemin SQL/JSON indiquent les Ă©lĂ©ments Ă rĂ©cupĂ©rer Ă
partir de données JSON, similaires aux expressions XPath utilisées pour
l'accĂšs SQL au XML. Dans PostgreSQL, les
expressions de chemin sont implémentées sous la forme du type de données
jsonpath
et peuvent utiliser tout élément décrit dans Section 8.14.7.
Les fonctions et opĂ©rateurs de requĂȘtes JSON passent l'expression de chemin fournie au moteur de chemin pour Ă©valuation. Si l'expression correspond Ă la donnĂ©e JSON requĂȘtĂ©e, l'Ă©lĂ©ment JSON correspondant ou l'ensemble d'Ă©lĂ©ments est renvoyĂ©. Les expressions de chemin sont Ă©crites dans le langage de chemin SQL/JSON et peuvent inclure les expressions et fonctions arithmĂ©tiques.
Une expression de chemin consiste en une séquence d'éléments autorisés par
le type de données jsonpath
. L'expression de chemin est
habituellement évaluée de gauche à droite, mais vous pouvez utiliser les
parenthÚses pour modifier l'ordre des opérations. Si l'évaluation réussit,
une séquence d'éléments JSON est produite et le résultat de l'évaluation
est renvoyĂ© Ă la fonction de requĂȘte JSON qui termine le traitement
indiqué.
Pour faire rĂ©fĂ©rence Ă la valeur JSON en cours de requĂȘtage
(l'élément de contexte), utilisez la variable
$
dans l'expression de chemin. Elle peut ĂȘtre suivie par
un ou plusieurs opérateurs
d'accesseurs, qui descendent dans la structure JSON, étape par
étape, pour récupérer les sous-éléments de l'élément de contexte. Chaque
opérateur qui suit traite le résultat de l'étape d'évaluation précédente.
Par exemple, supposez que vous ayez certaines données JSON à partir d'un traqueur GPS que vous voulez analyser, tel que :
{ "track": { "segments": [ { "location": [ 47.763, 13.4034 ], "start time": "2018-10-14 10:05:14", "HR": 73 }, { "location": [ 47.706, 13.2635 ], "start time": "2018-10-14 10:39:21", "HR": 135 } ] } }
Pour récupérer les segments de piste disponibles, vous avez besoin
d'utiliser l'opérateur d'accesseur
.
pour descendre Ă travers
les objets JSON tout autour :
key
$.track.segments
Pour récupérer le contenu d'un tableau, vous utilisez typiquement
l'opérateur [*]
. Par exemple, le chemin suivant renverra
les coordonnées d'emplacement pour tous les segments de piste
disponibles :
$.track.segments[*].location
Pour renvoyer les coordonnées du premier segment seulement, vous pouvez
indiquer l'indice correspondant dans l'opérateur []
.
Rappellez-vous que les indices de tableau JSON commencent Ă 0 :
$.track.segments[0].location
Le rĂ©sultat de chaque Ă©tape d'Ă©valuation de chemin peut ĂȘtre traitĂ© par un
ou plusieurs opérateurs et méthodes jsonpath
, listés dans
Section 9.16.2.2. Chaque nom de méthode
doit ĂȘtre prĂ©cĂ©dĂ© d'un point. Par exemple, vous pouvez obtenir la taille
d'un tableau :
$.track.segments.size()
D'autres exemples d'utilisation d'opérateurs et méthodes
jsonpath
à l'intérieur d'expressions de chemins apparaissent
ci-dessous dans Section 9.16.2.2.
Lors de la définition d'un chemin, vous pouvez aussi utiliser une ou
plusieurs expressions de filtre qui fonctionnent de
façon similaire à la clause WHERE
en SQL. Une expression
de filtre commence avec un point d'interrogation et fournit une condition
entre parenthĂšses :
? (condition
)
Les expressions de filtre doivent ĂȘtre Ă©crites juste aprĂšs l'Ă©tape
d'évaluation du chemin auquel elles s'appliquent. Le résultat de cette
étape est filtré pour inclure seulement les éléments qui satisfont la
condition fournie. SQL/JSON définit une logique à trois valeurs, donc la
condition peut valoir true
, false
ou
unknown
. La valeur unknown
joue le
mĂȘme rĂŽle que le NULL
SQL et peut ĂȘtre testĂ©e avec le
prédicat is unknown
. Les étapes suivantes d'évaluation
du chemin utilisent seulement les éléments pour lesquels l'expression de
filtre renvoie true
.
Les fonctions et opĂ©rateurs pouvant ĂȘtre utilisĂ©s dans des expressions de
filtre sont listés dans Tableau 9.50. à l'intérieur d'une
expression de filtre, la variable @
dénote la valeur en
cours de filtrage (un résultat de l'étape de chemin précédente). Vous
pouvez écrire les opérateurs d'accesseurs aprÚs @
pour
récupérer les éléments du composant.
Par exemple, supposez que vous vouliez récupérer toutes les valeurs de fréquence cardiaque supérieures à 130. Vous pouvez le faire en utilisant l'expression suivante :
$.track.segments[*].HR ? (@ > 130)
Pour obtenir les heures de début des segments ayant une telle valeur, vous devez filtrer les segments incompatiables avant de renvoyer les heures de début, donc l'expression de filtre est appliquée à l'étape précédente, et le chemin utilisé dans la condition est différent :
$.track.segments[*] ? (@.HR > 130)."start time"
Vous pouvez utiliser plusieurs expressions de filtre en séquence, si nécessaire. Par exemple, l'expression suivante sélectionne les heures de début de tous les segments qui contiennent des emplacements avec les bonnes coordonnées et les valeurs hautes de fréquence cardiaque :
$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR > 130)."start time"
Il est aussi autorisé d'utiliser des expressions de filtre à différents niveaux de profondeur. L'exemple suivant filtre tout d'abord tous les segments par emplacement, puis renvoie les valeurs hautes de fréquence cardiaque sur ces segments, si disponibles :
$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@ > 130)
Vous pouvez aussi imbriquer les expressions de filtre :
$.track ? (exists(@.segments[*] ? (@.HR > 130))).segments.size()
Cette expression renvoie la taille de la trace si elle contient des segments avec des valeurs hautes de fréquence cardiaque ou, sinon, une séquence vide.
L'implémentation PostgreSQL du langage de chemin SQL/JSON présente les différences suivantes sur le standard SQL/JSON :
Une expression de chemin peut ĂȘtre un prĂ©dicat boolĂ©en, bien que le
standard SQL/JSON autorise les prédicats uniquement dans les filtres.
Ceci est nécessaire pour l'implémentation de l'opérateur
@@
. Par exemple, l'expression jsonpath
suivante est valide dans PostgreSQL :
$.track.segments[*].HR < 70
Il existe des différences mineures dans l'interprétation des motifs
d'expression rationnelle utilisés dans les filtres
like_regex
, comme décrit dans Section 9.16.2.3.
Quand vous requĂȘtez des donnĂ©es JSON, l'expression de chemin pourrait ne pas correspondre Ă la structure de donnĂ©es JSON actuelle. Une tentative d'accĂ©der Ă un membre inexistant d'un objet ou d'un Ă©lĂ©ment d'un tableau rĂ©sulterait en une erreur de structure. Les expressions de chemin SQL/JSON ont deux modes pour la gestion des erreurs de structure :
lax (permissif, par dĂ©faut) -- le moteur de chemin adapte implicitement la donnĂ©e requĂȘtĂ©e au chemin spĂ©cifiĂ©. Toute erreur de structure restante est supprimĂ©e et convertie en des sĂ©quences SQL/JSON vides.
strict -- si une erreur de structure survient, une erreur est levée.
Le mode permissif facilite la correspondance de la structure d'un document JSON et celle d'une expression de chemin si la donnĂ©e JSON n'est pas conforme au schĂ©ma attendu. Si un opĂ©rande ne correspond pas aux demandes d'une opĂ©ration particuliĂšre, il peut ĂȘtre automatiquement intĂ©grĂ© Ă un tableau SQL/JSON ou dĂ©ballĂ© en convertissant ses Ă©lĂ©ments en une sĂ©quence SQL/JSON avant de rĂ©aliser cette opĂ©ration. De plus, les opĂ©rateurs de comparaison dĂ©ballent automatiquement leurs opĂ©randes dans le mode permissif, donc vous pouvez directement comparer les tableaux SQL/JSON. Un tableau de taille 1 est considĂ©rĂ© Ă©gal Ă son seul Ă©lĂ©ment. Le dĂ©ballage automatique n'est pas rĂ©aliser si :
L'expression de chemin contient les méthodes type()
ou size()
qui renvoient respectivement le type et le
nombre d'éléments dans le tableau.
Les donnĂ©es JSON requĂȘtĂ©es contiennent des tableaux imbriquĂ©s. Dans ce cas, seul le tableau externe est dĂ©ballĂ© alors que les tableaux internes restent inchangĂ©s. De ce fait, le dĂ©ballage implicite peut seulement descendre d'un niveau Ă chaque Ă©tape d'Ă©valuation du chemin.
Par exemple, lors du requĂȘtage de donnĂ©es GPS ci-dessus, vous pouvez faire abstraction du fait qu'il stocke un tableau de segments en utilisant le mode permissif :
lax $.track.segments.location
Dans le mode strict, le chemin spécifié doit correspondre exactement à la
structure du document JSON requĂȘtĂ© pour renvoyer un Ă©lĂ©ment SQL/JSON, donc
utiliser cette expression de chemin causera une erreur. Pour obtenir le
mĂȘme rĂ©sultat que dans le mode permissif, vous devez explicitement
déballer le tableau segments
:
strict $.track.segments[*].location
L'accesseur .**
peut apporter des résultats surprenants
lors de l'utilisation du mode non strict. Par exemple, la requĂȘte suivante
sélectionne chaque valeur HR
deux fois :
lax $.**.HR
Ceci survient parce que l'accesseur .**
sĂ©lectionne Ă
la fois le tableau de segments
et chacun de ses
éléments, alors que l'accesseur .HR
déballe
automatiquement les tableaux lors de l'utilisation du mode non strict.
Pour éviter des résultats surprenants, nous recommandons d'utiliser
l'accesseur .**
uniquement dans le mode strict. la
requĂȘte suivant sĂ©lectionne chaque valeur HR
une seule
fois :
strict $.**.HR
Tableau 9.49 montre les opérateurs et
méthodes disponibles pour jsonpath
. Notez que, bien que les
opĂ©rateurs et mĂ©thodes unaires puissent ĂȘtre appliquĂ©s Ă de nombreuses
valeurs résultant d'une étape de chemin précédente, les opérateurs
binaires (addition etc.) peuvent seulement ĂȘtre appliquĂ©s Ă des valeurs
seules.
Tableau 9.49. Opérateurs et méthodes jsonpath
Opérateur/Méthode Description Exemple(s) |
---|
Addition
|
Plus unaire (pas d'opération) ; contrairement à l'addition, ceci peut itérer sur plusieurs valeurs
|
Soustraction
|
Négation ; contrairement à la soustraction, ceci peut itérer sur plusieurs valeurs
|
Multiplication
|
Division
|
Modulo (reste)
|
Type de l'élément JSON (voir
|
Taille de l'élément JSON (nombre d'éléments d'un tableau, ou 1 si ce n'est pas un tableau)
|
Nombre flottant approximatif converti en nombre JSON ou en chaĂźne
|
Entier le plus proche, plus grand ou égal au nombre donné
|
Entier le plus proche, plus petit ou égal au nombre donné
|
Valeur absolue du nombre donné
|
Valeur date/heure convertie en chaĂźne
|
Valeur date/heure convertie en une chaĂźne en utilisant le modĂšle
|
Les paires clé-valeur de l'objet, représentées sous la forme d'un
tableau d'objets contenant trois champs :
|
Le type de résultat des méthodes datetime()
et
datetime(
peut
ĂȘtre template
)date
, timetz
, time
,
timestamptz
ou timestamp
. Les deux méthodes
déterminent dynamiquement le type du résultat.
La méthode datetime()
trie en séquence pour faire
correspondre sa chaßne en entrée aux formats ISO pour les types
date
, timetz
, time
,
timestamptz
et timestamp
. Elle s'arrĂȘte au
premier format correspondant et émet le type de données correspondant.
La méthode datetime(
détermine le type de résultat suivant les champs utilisés dans la chaßne
modĂšle fournie.
template
)
Les méthodes datetime()
et
datetime(
utilisent les mĂȘmes rĂšgles d'analyse que la fonction SQL
template
)to_timestamp
(voir Section 9.8), avec trois exceptions. Tout d'abord,
ces méthodes n'autorisent pas les motifs de modÚle sans correspondance.
Ensuite, seuls les séparateurs suivants sont autorisés dans la chaßne
modĂšle : signe moins, point, barre oblique, virgule, apostrophe,
point-virgule, deux-points et espace. Enfin, les séparateurs dans la
chaßne modÚle doivent correspondre exactement à la chaßne en entrée.
Si diffĂ©rents types date/heure doivent ĂȘtre comparĂ©s, une conversion
implicite est appliquée. Une valeur date
peut ĂȘtre
convertie en timestamp
ou timestamptz
, une
valeur timestamp
peut ĂȘtre convertie en
timestamptz
, et une valeur time
en
timetz
. Néanmoins, toutes sauf la premiÚre de ces
conversions dĂ©pendent du paramĂ©trage actuel de TimeZone, et de ce fait peuvent seulement ĂȘtre rĂ©alisĂ©es
Ă travers les fonctions jsonpath
sensibles au fuseau
horaire.
Tableau 9.50 montre les éléments d'expression de filtre disponibles.
Tableau 9.50. ĂlĂ©ments d'expression de filtre jsonpath
Prédicat/valeur Description Exemple(s) |
---|
Comparaison d'égalité (ceci, et les autres opérateurs de comparaison, fonctionnent sur toutes les valeurs scalaires JSON)
|
Comparaison de non égalité
|
Comparaison inférieur
|
Comparaison inférieur ou égal
|
Comparaison supérieur
|
Comparaison supérieur ou égal
|
Constante JSON
|
Constante JSON
|
Constante JSON
|
AND booléen
|
OR booléen
|
NOT booléen
|
Teste si une condition booléenne est
|
Teste si le premier opérande correspond à l'expression rationnelle
donnée par le deuxiÚme opérande, optionnellement avec les
modifications décrites par une chaßne avec les caractÚres de
|
Teste si le deuxiÚme opérande est une sous-chaßne initiale du premier opérande.
|
Teste si une expression de chemin correspond à au moins un élément
SQL/JSON. Renvoie
|
Les expressions de chemin SQL/JSON permettent la correspondance de texte
selon une expression rationnelle avec le filtre
like_regex
. Par exemple, la requĂȘte de chemin SQL/JSON
suivante correspondrait, sans sensibilité à la casse, à toutes les
chaßnes d'un tableau commençant avec une voyelle anglaise :
$[*] ? (@ like_regex "^[aeiou]" flag "i")
La chaĂźne optionnelle flag
pourrait inclure un ou
plusieurs caractĂšres : i
pour une recherche
insensible Ă la casse, m
pour autoriser
^
et $
Ă correspondre aux nouvelles
lignes, s
pour autoriser .
Ă
correspondre Ă une nouvelle ligne, et q
pour englober
le motif complet (réduisant le comportement à une simple correspondance
de sous-chaĂźne).
Le standard SQL/JSON emprunte sa définition d'expressions rationnelles de
l'opérateur LIKE_REGEX
qui, Ă son tour, utilise le
standard XQuery. PostgreSQL n'accepte pas actuellement l'opérateur
LIKE_REGEX
. De ce fait, le filtre
like_regex
est implémenté en utilisant le moteur
d'expression rationnelle POSIX décrit dans Section 9.7.3. Ceci amÚne différentes variations
mineures du comportement du standard SQL/JSON, listées dans Section 9.7.3.8. Notez, néanmoins, que les incompatibilités
au niveau des lettres du drapeau dĂ©crites ici ne s'appliquent pas Ă
SQL/JSON, car elles traduisent les lettres drapeau de XQuery pour
correspondre Ă ce que le moteur POSIX attend.
Gardez en tĂȘte que l'argument motif de like_regex
est
une chaßne littérale de chemin JSON, écrite suivant les rÚgles données
dans Section 8.14.7. Ceci signifie en particulier
que tout antislash utilisĂ© dans l'expression rationnelle doit ĂȘtre
doublé. Par exemple, pour établir une correspondance aux valeurs de type
chaĂźne de caractĂšres du document racine ne contenant que des chiffres :
$.* ? (@ like_regex "^\\d+$")