Fonctions SQL standardisées dans ArcGIS Online

ArcGIS Online oblige les développeurs à utiliser des requêtes SQL standardisées lorsqu’ils interrogent des couches d’entités hébergées. L’utilisation de requêtes SQL standardisées permet d’éviter les attaques par injection de code SQL. Toutes les applications ArcGIS prennent en charge les requêtes SQL standard.

Limites des requêtes standardisées

  • Les requêtes standardisées sont appliquées à l’organisation dans son intégralité. Elles ne peuvent pas être désactivées pour certaines couches.
  • Les requêtes standardisées ne sont pas prises en charge sur les jointures entre différents espaces de travail.
  • Les sous-requêtes sous forme de clause WHERE, par exemple POP_2010 = (SELECT min(POP_2010) FROM counties, ne sont pas prises en charge.
  • Les requêtes provenant de services de base de données, par exemple, Microsoft Azure SQL Database, ne sont pas prises en charge.

Fonctions SQL qui sont prises en charge dans ArcGIS Online

Si vous développez des applications et que vous utilisez la syntaxe de clause WHERE spécifique à la base de données, vous devez mettre à jour les clauses WHERE du code de votre application pour qu’elles utilisent la syntaxe SQL normale prise en charge par ArcGIS Online. Les tables suivantes présentent les fonctions SQL prises en charge, ainsi que leur syntaxe respective. Lorsque les fonctions et la syntaxe suivantes sont utilisées dans vos applications, ArcGIS Online les convertit pour qu’elles respectent la spécification de la base de données utilisée par la couche d’entités.

Fonctions de date

FonctionDescription

CURRENT_DATE()

Renvoie la date actuelle en heure UTC.

La valeur affichée dépend du client que vous utilisez. Dans ArcGIS Online, les dates s’affichent dans le fuseau horaire de votre organisation ou de votre profil.

CURRENT_TIME()

Renvoie la date et l'heure UTC actuelles (heures, minutes, secondes).

La valeur affichée dépend du client que vous utilisez. Dans ArcGIS Online, l’heure s’affiche dans l’heure locale de votre organisation ou de votre profil.

CURRENT_TIMESTAMP()

Renvoie la date et l'heure UTC actuelles (heures, minutes, secondes, millisecondes).

La valeur affichée dépend du client que vous utilisez. Dans ArcGIS Online, l’heure s’affiche dans l’heure locale de votre organisation ou de votre profil.

EXTRACT(<unit> FROM <date>)

Renvoie une seule partie (<unit>) de <date> spécifié. Parmi les valeurs <unit> possibles figurent, sans toutefois s’y limiter : year, month, day, hour et minute.

Les exemples suivants extraient différentes unités à partir de la valeur de date et d’heure 21/12/2016 15 h 11 :

  • EXTRACT(MONTH FROM TIMESTAMP '2016-12-21 15:11:00') : renvoie 12.
  • EXTRACT(DAY FROM TIMESTAMP '2016-12-21 15:11:00') : renvoie 21.
  • EXTRACT(HOUR FROM TIMESTAMP '2016-12-21 15:11:00') : renvoie 15.

Fonctions numériques

FonctionDescription

ABS(<number>)

Renvoie la valeur absolue (positive) du nombre que vous spécifiez.

CAST(<number> AS FLOAT | INT)

Convertit un nombre en un type différent. FLOAT convertit le nombre spécifié en une valeur double et INT le convertit en un nombre entier.

Dans le premier exemple ci-dessous, le nombre est défini sur un entier. Les entiers représentant des nombres entiers, le résultat est 1424. Dans le deuxième exemple, un entier est défini sur le type flottant, ce qui donne comme résultat un nombre avec des décimales : 1424,0.

  • CAST(1424.49 AS INT)
  • CAST(1424 AS FLOAT

CEILING(<number>)

Renvoie le plus petit nombre entier supérieur ou égal au nombre spécifié.

L’exemple suivant renvoie 13 :

CEILING(12.93)

COS(<number>)

Renvoie le cosinus trigonométrique de <number>, qui est censé être un angle en radians.

FLOOR(<number>)

Renvoie le plus grand nombre entier qui est inférieur ou égal au nombre spécifié.

L’exemple suivant renvoie 12 :

FLOOR(12.93)

LOG(<number>)

Logarithme naturel du nombre spécifié.

LOG10(<number>)

Logarithme de base 10 du nombre spécifié.

MOD(<number>, <n>)

Renvoie le reste une fois le dividende (<nombre>) divisé par le diviseur <n>. <n> et <nombre> doivent tous les deux être de type entier.

Voici quelques exemples :

  • MOD(10, 4) : le résultat est 2.
  • MOD(CAST(DBLFIELD AS INT), 4) : DBLFIELD étant un champ de type double, la fonction CAST est nécessaire pour convertir les valeurs doubles en valeurs entières.

NULLIF(<number>, <value>)

Renvoie null si le nombre spécifié est égal à la valeur spécifiée. NULLIF est fréquemment utilisé pour éviter les erreurs de division par zéro en définissant <value> sur 0.

Dès qu’un calcul rencontre une valeur de champ null dans un de ses arguments, le résultat du calcul est null.

Supposons par exemple que vous deviez calculer un champ double devant être TOTALPOP divisé par POP18. Si une entité possède une valeur POP18 égale à zéro, le calcul génère une erreur de division par zéro. Vous pouvez créer un filtre pour masquer les enregistrements où POP18 est égal à zéro, puis effectuer le calcul. Il est plus rapide d’utiliser NULLIF :

TOTALPOP / NULLIF(POP18, 0) : renvoie null si POP18 est égal à zéro ; sinon, renvoie la valeur de TOTALPOP / POP18.

POWER(<number> , <y>)

Renvoie la valeur du nombre spécifié élevée à la puissance indiquée (<y>).

L’exemple suivant renvoie 32768 :

POWER(8,5)

ROUND(<number> , <length>)

Arrondit le nombre que vous spécifiez à la longueur spécifiée.

Si <length> est un nombre positif, le nombre est arrondi à la position décimale à droite du séparateur décimal. Lorsque <length> est un nombre négatif, le <number> spécifié est arrondi à gauche du séparateur décimal.

Voici quelques exemples :

  • ROUND(10.9934,2) : renvoie 10,99.
  • ROUND(10.9964,2) : renvoie 11,00.
  • ROUND(111.0,-2) : renvoie 100,00.

SIN(<number>)

Renvoie le sinus trigonométrique du <number> spécifié, qui est censé être un angle en radians.

TAN(<number>)

Renvoie la tangente du <number> spécifié, qui est censé être un angle en radians.

TRUNCATE(<number>,<decimal_place>)

Tronque <number> au <decimal_place> spécifié.

Un <decimal_place> positif tronque à la position décimale spécifiée. Lorsque <decimal_place> est un nombre négatif, <number> est arrondi à gauche du séparateur décimal.

Dans le premier exemple, les chiffres à droite du séparateur décimal sont tronqués pour inclure seulement deux chiffres. Le résultat est donc 111,99. Dans le deuxième exemple, les chiffres à gauche du séparateur décimal sont tronqués. Le résultat est donc 100,00.

  • TRUNCATE(111.996,2)
  • TRUNCATE(111.996,-2)

Fonctions de chaîne

FonctionDescription

CAST(<string> AS DATE | TIME)

Convertit la chaîne en date ou heure si le format de sa valeur est pris en charge.

Si la chaîne est au format ’MM/JJ/AAAA hh:mm:ss’ ou ’AAAA-MM-JJ’, vous pouvez la convertir en date. Si la chaîne est au format ’HH:MM:SS’, vous pouvez la convertir en données de type heure uniquement (TIME).

Par exemple, la chaîne suivante peut être convertie en date :

CAST('1988-05-30' AS DATE)

CHAR_LENGTH(<string>)

Renvoie le nombre de caractères dans la chaîne spécifiée. Le résultat est un entier.

Par exemple, l’instruction suivante renvoie 8 :

CHAR_LENGTH('Redlands')

CONCAT(<string1>, <string2>)

Concatène deux valeurs de chaîne.

Deux chaînes uniquement peuvent être fournies. Pour concaténer plus de deux chaînes, imbriquez plusieurs fonctions CONCAT consécutives, comme indiqué ci-après.

Le premier exemple ci-dessous concatène les lettres A et B. Le deuxième exemple montre une fonction CONCAT imbriquée pour concaténer trois valeurs de chaîne : A, : et B.

  • CONCAT('A', 'B') : le résultat est 'AB'.
  • CONCAT('A', CONCAT(':', 'B')) : le résultat est 'A:B'.

Les valeurs Null sont converties en chaîne vide.

CURRENT_USER

Lorsque la fonction CURRENT_USER est incluse dans une requête, elle agit comme une variable. Le nom d’utilisateur de l’utilisateur qui accède à la couche d’entités hébergée ou à la vue de couche d’entités hébergée est identifié et utilisé dans la requête.

Par exemple, si l’utilisateur, planner3, est connecté à l’organisation pour accéder à une vue de couche d’entités hébergée qui contient l’ensemble de définitions suivant, seules les entités pour lesquelles le champ staffmember contient la valeur planner3 sont renvoyées à l’utilisateur qui se connecte :

staffmember=current_user

Dans l’exemple suivant, plusieurs valeurs sont enregistrées dans le champ staffmember. La clause where suivante recherche le nom de l’utilisateur actuel dans la valeur textuelle du champ staffmember, même si plusieurs noms d’utilisateur sont enregistrés dans ce champ :

where=position(current_user in staffmember)>0

POSITION(<substring>, <string>)

Renvoie la position de la première occurrence de la sous-chaîne spécifiée dans la chaîne que vous spécifiez. Si la sous-chaîne spécifiée est introuvable, le résultat est 0.

Dans le premier exemple ci-dessous, le résultat est 5, car la première lettre (b) de la sous-chaîne (boat) est la cinquième lettre de la chaîne (Sailboat). Dans le deuxième exemple, le résultat est 0, car la sous-chaîne (motor) n’est pas présente dans la chaîne.

  • POSITION('boat', 'Sailboat')
  • POSITION('motor', 'Sailboat')

SUBSTRING(<string>, <start>, <length>)

Renvoie une partie d’une valeur de chaîne ; <start> est un index entier qui indique l’endroit où les caractères renvoyés débutent et <length> désigne le nombre de caractères à renvoyer.

Consultez les exemples ci-dessous :

  • SUBSTRING('Sailboat', 5, 4) : le résultat est 'boat'.
  • SUBSTRING('Sailboat', 1, 4) : le résultat est 'Sail'.
  • SUBSTRING('Sailboat', 5, 100) : le résultat est 'boat'.

TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>)

Renvoie une chaîne dans laquelle tous les espaces de début ou de fin sont supprimés de la chaîne que vous spécifiez.

Dans l’exemple suivant, il existe un espace avant et après la chaîne, San Bernardino. Le mot-clé BOTH est utilisé pour tronquer la chaîne d’espace (ce qui est indiqué par l’utilisation de deux guillemets avec un espace au milieu) au début et à la fin de la chaîne de texte :

TRIM(BOTH ' ' FROM ' San Bernardino ')

Cela renvoie la chaîne 'San Bernardino'.

UPPER(<string>)

Renvoie une chaîne où tous les caractères sont convertis en majuscules.

Dans cet exemple, toutes les lettres de la chaîne Sailboat sont converties en lettres majuscules, créant ainsi la chaîne 'SAILBOAT' :

UPPER('Sailboat')

LOWER(<string>)

Renvoie une chaîne où tous les caractères sont convertis en minuscules.

Dans l’exemple suivant, 'sailboat' est renvoyé :

LOWER('Sailboat')