Référence SQL pour les expressions de requête utilisées dans ArcGIS

Le langage SQL est un langage informatique formé par un ensemble de syntaxes et d’expressions permettant d’exploiter les données des bases de données et de manipuler ces données dans d’autres technologies de traitement des données.

L’institut de normalisation américain ANSI (American National Standards Institute) définit une norme SQL. La plupart des systèmes de gestion de bases de données relationnelles (SGDBR) utilisent et ont développé cette norme, ce qui rend la syntaxe SQL légèrement différente d’un SGDBR à un autre.

Les expressions de requête dans ArcGIS respectent les expressions SQL standard. La syntaxe SQL que vous utilisez dans une expression varie selon la source de données. Chaque source de données possède sa propre variante SQL, ces variantes étant également appelées dialectes SQL, par exemple :

  • Les données fichiers, y compris les géodatabases fichiers, shapefiles, vues tabulaires en mémoire, fichiers texte tels que .dbf, .csv, .txt, tables .xlsx et services d’entités utilisant des requêtes standardisées utilisent le dialecte SQL ArcGIS qui prend en charge un sous-ensemble de fonctionnalités SQL.
  • Les géodatabases mobiles, ST_geometry SQLite, Open Geospatial Consortium (OGC) GeoPackage et Microsoft Excel utilisent le dialecte SQL SQLite.
  • Les bases de données et les géodatabases d’entreprise utilisent la syntaxe SQL du SGBDR sous-jacent (par exemple, Oracle, Microsoft SQL Server, PostgreSQL, SAP HANA et IBM Db2) où chaque base de données utilise son propre dialecte SQL légèrement différent.

Lorsque vous utilisez les boîtes de dialogue ArcGIS pour construire une expression SQL, la saisie automatique vous permet d’appliquer la syntaxe correcte pour la source de données que vous interrogez. Au fur et à mesure de votre saisie, une invite présentant les noms de champ, valeurs, mots-clés et les opérateurs pris en charge par votre source de données apparaît.

Conseil :

Révisez les éléments suivants pour savoir dans quelles circonstances on utilise la syntaxe SQL ArcGIS ou la syntaxe SQL du SGBDR sous-jacent lors de la création d’une expression SQL.

  • Si les données de votre expression SQL proviennent de plusieurs emplacements de source de données, la situation suivante se produira :
    • Lorsque les données ont pour source à la fois des fichiers et un SGDBR, la syntaxe SQL ArcGIS SQL est utilisée.
  • Si toutes les données de votre expression SQL proviennent du même emplacement de source de données, l’opération suivante se produira :
    • Lorsque la source des données est un fichier, la syntaxe SQL ArcGIS est utilisée.
    • Lorsque la source des données est une base de données ou une géodatabase d’entreprise, ArcGIS transmet l’expression SQL au SGBDR pour résolution. Vous devrez consulter la documentation de votre système de gestion de base de données pour connaître la syntaxe spécifique de l’expression et les types de données pris en charge.

Dans ArcGIS AllSource, la boîte de dialogue d’expression SQL se trouve aux emplacements suivants :

Syntaxe d’une expression SQL

Une expression SQL est composée d’une combinaison d’une ou plusieurs valeurs, opérateurs et fonctions SQL pouvant être utilisées pour réaliser une requête ou sélectionner un sous-ensemble d’entités et d’enregistrements de table dans ArcGIS.

Toutes les requêtes SQL sont exprimées à l’aide du mot-clé SELECT.

SELECT * FROM constitue la première partie de l’expression SQL et est renseignée automatiquement pour vous dans la plupart des boîtes de dialogue ArcGIS. Par exemple, lorsque vous créez une requête en écrivant une syntaxe SQL, une déclaration SELECT permettant de sélectionner les champs dans une couche ou une table vous est proposée.

La clause SELECT * FROM <Layer_name> est la partie suivante de l’expression SQL venant après WHERE. La clause WHERE permet d’obtenir des enregistrements qui répondent à des critères précis et constitue la partie de l’expression que vous devez créer.

Conseil :

Dans une expression SQL, l’astérisque (*) est utilisé pour interroger toutes les colonnes.

Voici une forme de base de la clause WHERE d’une expression SQL :

  • <Field_name> <Operator> <Value or String>

Syntaxe d’une expression SQL de base

Par exemple, STATE_NAME = 'Florida'. Cette expression ne contient qu’une seule clause et sélectionne toutes les entités contenant « Florida » dans le champ STATE_NAME.

La forme suivante est utilisée pour les expressions composées :

  • <Field_name> <Operator> <Value or String> <Connector> <Field_name> <Operator> <Value or String> ...

Syntaxe d’une expression SQL composée

Par exemple, STATE_NAME = 'Florida' OR (STATE_NAME = 'South Carolina' AND POP2010 > 15000). Cette expression composée comprend plusieurs clauses reliées par un opérateur logique, AND ou OR, et sélectionne toutes les entités contenant le mot Florida dans le champ STATE_NAME, ainsi que toutes les entités contenant à la fois South Carolina dans le champ STATE_NAME et ayant une valeur supérieure à 15 000 dans le champ POP2010.

Conseil :

Vous pouvez utiliser des parenthèses () pour définir l’ordre des opérations dans les requêtes composées.

Étant donné que vous sélectionnez les colonnes dans leur totalité, vous ne pouvez pas restreindre l’instruction SELECT pour renvoyer uniquement certaines colonnes de la table correspondante car la syntaxe SELECT * est précodée. Pour cette raison, les mots-clés tels que DISTINCT, ORDER BY et GROUP BY ne peuvent pas être utilisés dans une expression SQL dans ArcGIS, sauf lors de l’utilisation de sous-requêtes. Pour en savoir plus, reportez-vous à la section Sous-requêtes ci-dessous.

Les sections suivantes décrivent les éléments des expressions de requête SQL communes utilisées dans ArcGIS.

Requêtes courantes : recherche de chaînes

Les chaînes doivent toujours être entourées de guillemets simples dans les requêtes, par exemple :

STATE_NAME = 'California'

Les chaînes respectent la casse dans les expressions, sauf lors de l’exécution sur les géodatabases dans Microsoft SQL Server. Pour effectuer une recherche non sensible à la casse dans les autres sources de données, vous pouvez utiliser une fonction SQL permettant d’appliquer la même casse à toutes les valeurs. Pour les sources de données fichier, telles que les géodatabases fichier ou les shapefiles, vous pouvez utiliser la fonction UPPER ou LOWER pour définir la casse d’une sélection. L’expression suivante, par exemple, permet de sélectionner l’état américain dont le nom est enregistré sous « Rhode Island » ou « RHODE ISLAND » :

UPPER(STATE_NAME) = 'RHODE ISLAND'

Pour effectuer une recherche à l’aide d’une chaîne partielle, utilisez l’opérateur LIKE (au lieu de l’opérateur =). L’expression suivante, par exemple, permet de sélectionner Mississippi et Missouri dans les noms d’états américains :

STATE_NAME LIKE 'Miss%'

Utilisez l’opérateur IN pour spécifier plusieurs valeurs. Par exemple, sélectionnez toutes les valeurs dans California, New York et Colorado.

STATE_NAME IN ('California', 'New York', 'Colorado')

Si la chaîne contient un guillemet simple, vous devez d’abord utiliser un autre guillemet simple comme caractère d’échappement, par exemple :

NAME = 'Alfie''s Trough'
OWNER_NAME IN ('Joseph D''Souza', 'Katherine Smith', 'Tim O''Brien')

Le symbole de pourcentage (%) signifie qu’il peut être remplacé par tout : un caractère, cent caractères ou aucun caractère. Par contre, pour effectuer une recherche avec un caractère générique représentant un seul caractère, utilisez le caractère de soulignement (_). Par exemple, cette expression trouve Catherine Smith et Katherine Smith :

OWNER_NAME LIKE '_atherine Smith'

Vous pouvez utiliser les opérateurs supérieur à (>), inférieur à (<), supérieur ou égal à (>=), inférieur ou égal à (<=), différent de (<>) et BETWEEN (entre) pour sélectionner les valeurs de chaîne en fonction de l’ordre de tri. Voici, par exemple, une expression qui permet de sélectionner toutes les villes d’une couverture dont le nom commence par les lettres M à Z :

CITY_NAME >= 'M'

Des fonctions de chaîne peuvent être utilisées pour formater les chaînes. Par exemple, la fonction LEFT renvoie un certain nombre de caractères en commençant à gauche de la chaîne. Dans cet exemple, la requête renvoie tous les états commençant par la lettre A :

LEFT(STATE_NAME,1) = 'A'

Reportez-vous à la documentation fournie avec votre SGBDR pour obtenir la liste des fonctions prises en charge.

Expressions courantes : recherche de valeurs nulles

Vous pouvez utiliser le mot-clé NULL afin de sélectionner les entités et les enregistrements comportant des valeurs nulles pour le champ spécifié. Le mot-clé NULL est toujours précédé de IS ou IS NOT. Par exemple, pour rechercher les villes dont la population en 1996 n’a pas été spécifiée, vous pouvez utiliser l’expression suivante :

POPULATION IS NULL

En revanche, pour rechercher les villes dont la population en 1996 a été spécifiée, vous pouvez utiliser l’expression suivante :

POPULATION96 IS NOT NULL

Si un champ de géométrie est sélectionné, seuls les mots-clés NULL et NOT NULL peuvent être recherchés.

Expressions courantes : recherche de nombres

Le point (.) est toujours utilisé comme séparateur décimal, quels que soient vos paramètres régionaux ou locaux. La virgule ne peut pas être utilisée comme séparateur décimal ni séparateur des milliers dans une expression.

Vous pouvez effectuer des requêtes sur des nombres à l’aide des opérateurs égal à (=), différent de (<>), supérieur à (>), inférieur à (<), supérieur ou égal à (>=), inférieur ou égal à (<=) et BETWEEN (entre), par exemple :

POPULATION >= 5000

Des fonctions numériques peuvent être utilisées pour formater des nombres. Par exemple, la fonction ROUND permet d’arrondir un chiffre selon un nombre défini de décimales dans une géodatabase fichier :

ROUND(SQKM,0) = 500

Reportez-vous à la documentation de votre SGBDR pour obtenir la liste des fonctions numériques prises en charge.

Date/heure

Règles générales et expressions courantes

Les sources de données de géodatabase stockent les dates dans des champs date-heure. Ce n’est pas le cas des shapefiles. La plupart des syntaxes représentées ci-dessous contiennent par conséquent une référence à l’heure. Dans certains cas, la partie heure de la requête peut être omise si le champ contient uniquement des dates ; dans d’autres cas, cette partie heure doit être définie, sinon, la requête renvoie une erreur de syntaxe.

Lorsque votre recherche porte sur des champs de date, faites attention au type de champ date-heure et à la syntaxe requise par votre source de données. Si vous créez une requête de date dans le mode Clause du Générateur de requêtes, la syntaxe appropriée est automatiquement générée. Voici un exemple de requête qui renvoie tous les enregistrements à partir du 1er janvier 2011, pour un champ date-heure d’une source de données de géodatabase fichier :

INCIDENT_DATE >= timestamp '2011-01-01 00:00:00'

Remarque :

Dans ArcGIS AllSource, vous ne pouvez pas insérer ou afficher une valeur de date antérieure à 100 CE. Si vous utilisez un type de date stockant l’heure, l’heure 00:00:00 équivaut à minuit.

Lorsqu’une heure non nulle est stockée avec des dates (par exemple le 12 janvier 1999 à 04:00:00), la recherche lancée uniquement sur la date ne renvoie pas l’enregistrement. En effet, lorsque vous transmettez uniquement une date à un champ date-heure, l’heure est complétée par des zéros et seuls les enregistrements affichant l’heure 12:00:00 a.m sont extraits.

La table attributaire affiche la date et l’heure dans un format convivial en fonction de vos paramètres régionaux plutôt que du format de la base de données sous-jacente. Cela peut présenter quelques inconvénients :

  • La chaîne indiquée dans la requête SQL reflète parfois assez peu la valeur affichée dans la table, en particulier dans le cas de l’heure. Par exemple, une heure saisie sous la forme 00:00:15 affiche sous la forme 12:00:15 a.m dans la table attributaire, avec États-Unis comme paramètres régionaux et Datefield = ’1899-12-30 00:00:15’ comme syntaxe de requête.
  • La table attributaire ignore la source de données sous-jacente tant que vous n’avez pas enregistré vos modifications. Elle tente tout d’abord d’adapter la valeur saisie à son propre format puis, une fois les modifications enregistrées, elle tente d’adapter la valeur obtenue afin de l’intégrer à la base de données. Pour cette raison, vous pouvez saisir une heure dans un fichier de formes, mais sachez qu’elle n’est pas conservée lorsque vous enregistrez vos modifications. Le champ contient alors une valeur « 1899-12-30 » qui s’affiche sous la forme 12:00:00 a.m. ou une forme équivalente en fonction de vos paramètres régionaux.

Syntaxe date-heure des géodatabases

Vous trouverez ci-dessous des exemples de syntaxe SQL date-heure prise en charge par les géodatabases fichier, les géodatabases mobiles et les dates dans un shapefile. Certaines géodatabases d’entreprise et sources de données SGBDR prennent également en charge la syntaxe SQL date-heure, bien que ces sources de données puissent exiger une syntaxe SQL légèrement différente.

Consultez la documentation de votre système de gestion de base de données pour connaître la syntaxe spécifique de l’expression SQL et les types de données pris en charge.

Remarque :
  • Oracle ne prend pas en charge les champs ne comportant que la date (esriFieldTypeDateOnly) et ceux ne comportant que l’heure (esriFieldTypeTimeOnly).
  • PostgreSQL ne prend pas en charge le champ d’horodatage avec décalage (esriFieldTypeTimestampOffset).

Géodatabases fichier

Dans les géodatabases fichier, les champs ne comportant que la date et ceux ne comportant que l’heure sont précédés du terme date ou time, respectivement. Les champs date-heure sont précédés de timestamp.

Datefield = timestamp 'yyyy-mm-dd'

Les géodatabases fichier prennent en charge l’utilisation d’une heure dans le champ de date ; cela peut donc être ajouté à l’expression :

Datefield = timestamp 'yyyy-mm-dd hh:mm:ss'

Pour les champs ne comportant que la date, ne comportant que l’heure ou contenant un horodatage qui comportent des décalages, utilisez les formats suivants :

//DateOnlyField = time 'yyyy-mm-dd'
DateOnlyField = time '2003-01-08'

//TimeOnlyField = date 'HH24:mm:ss'
TimeOnlyField = date '14:35:00'

//TimestampOffsetField = timestamp 'yyyy-mm-dd HH24:mm:ss -TZH:TZM' 
TimestampOffsetField = timestamp '2003-01-08 14:35:00 -08:00'

Géodatabases mobiles

Certains types de champ de date sont précédés du mot JULIANDAY. D’autres sont formatés de manière syntaxique avec une fonction.

Datefield = JULIANDAY('yyyy-mm-dd')

Les géodatabases mobiles prennent en charge l’utilisation de l’heure dans les champs de date ; cela peut donc être ajouté à l’expression :

Datefield = JULIANDAY('yyyy-mm-dd HH24:mm:ss')

//TimestampOffsetField = 'yyyy-mm-dd HH24:mm:ss -TZH:TZM'
TimestampOffsetField = '2003-01-08 14:35:00 -08:00'

//DateOnlyField = JULIANDAY('yyyy-mm-dd')
DateOnlyField = JULIANDAY('2003-01-08')

//TimeOnlyField = 'HH24:mm:ss'
TimeOnlyField = '14:35:00'

Fichier de formes, couvertures et autres sources de données fichier

Datefield = date 'yyyy-mm-dd'

Les fichiers de formes et les couvertures ne prennent pas en charge l’utilisation d’une heure dans un champ de date.

Limitations connues

L’interrogation par rapport à une date dans la partie gauche (première table) d’une jointure aboutit uniquement avec les sources de données basées sur un fichier, telles que les géodatabases fichier, les shapefiles et les tables DBF. Il est toutefois possible de contourner le problème et d’utiliser des données qui ne sont pas basées sur un fichier, telles que des données de géodatabase d’entreprise, comme expliqué ci-dessous.

Une interrogation par rapport à une date dans la partie gauche d’une jointure aboutit lorsque vous utilisez la version limitée de SQL développée pour les sources de données fichier. Si vous n’utilisez pas une telle source de données, vous pouvez forcer l’expression à utiliser ce format. Pour ce faire, vous devez vous assurer que l’expression de requête implique des champs de plusieurs tables de jointure. Par exemple, si une classe d’entités (FC1) et une table (Table1) sont jointes et qu’elles proviennent toutes les deux d’une géodatabase d’entreprise, les expressions suivantes échouent ou ne renvoient pas de données :

FC1.date = date #01/12/2001#
FC1.date = date '01/12/2001'

Pour que l’interrogation aboutisse, vous pouvez créer une requête comme suit :

FC1.date = date '01/12/2001' and Table1.OBJECTID > 0

Comme la requête implique des champs de deux tables, la version SQL limitée est utilisée. Dans cette expression, Table1.OBJECTID est toujours > 0 pour les enregistrements correspondants pendant la création de jointure, de manière à ce que cette expression soit vraie pour tous les enregistrements contenant des correspondances de jointure.

Pour garantir que chaque enregistrement avec FC1.date = date ’01/12/2001’ est sélectionné, utilisez la requête suivante :

FC1.date = date '01/12/2001' and (Table1.OBJECTID IS NOT NULL OR Table1.OBJECTID IS NULL)

Cette requête sélectionne tous les enregistrements avec FC1.date = date ’01/12/2001’, qu’il existe ou non une correspondance de jointure pour chaque enregistrement particulier.

Combinaison des expressions

Des expressions composées peuvent être créées en combinant des expressions à l’aide des opérateurs AND et OR. Par exemple, pour sélectionner tous les bâtiments d’habitation occupant une surface supérieure à 1 500 pieds carrés avec un garage pouvant contenir trois voitures ou plus, utilisez l’expression suivante :

AREA > 1500 AND GARAGE > 3

Lorsque vous utilisez l’opérateur OR, au moins un des deux côtés de l’expression séparés par l’opérateur OR doit être vrai pour que l’enregistrement puisse être sélectionné, par exemple :

RAINFALL < 20 OR SLOPE > 35

Utilisez l’opérateur NOT au début d’une expression pour rechercher les entités ou les enregistrements qui ne correspondent pas à l’expression spécifiée, par exemple :

NOT STATE_NAME = 'Colorado'

Les expressions comportant l’opérateur NOT peuvent combiner les opérateurs AND et OR. L’expression suivante, par exemple, permet de sélectionner tous les états de Nouvelle-Angleterre à l’exception du Maine :

SUB_REGION = 'New England' AND NOT STATE_NAME = 'Maine'

Calculs

Vous pouvez inclure des calculs dans les expressions à l’aide des opérateurs arithmétiques +, -, * et /. Les calculs peuvent être effectués entre des champs et des nombres, par exemples :

AREA >= PERIMETER * 100

Les calculs peuvent également être effectués entre différents champs. Ainsi, pour rechercher les départements ayant une densité de population inférieure ou égale à 25 habitants par kilomètre carré, vous pouvez utiliser l’expression suivante :

POP1990 / AREA <= 25

Précédence des opérateurs

Les expressions sont évaluées selon des règles standard de précédence des opérateurs. Par exemple, la partie d’une expression placée entre parenthèses est évaluée avant la partie en dehors des parenthèses.

HOUSEHOLDS > MALES * (POP90_SQMI + AREA)

Lorsque vous modifiez une expression SQL, en mode d’édition SQL, vous pouvez ajouter des parenthèses en les saisissant directement ou utiliser les commandes Group (Grouper) et Ungroup (Dissocier) en mode clause pour les ajouter ou les supprimer.

Sous-requêtes

Une sous-requête est une requête imbriquée dans une autre requête. Les sous-requêtes sont prises en charge uniquement par les sources de données de géodatabase. Elle peut être utilisée pour appliquer un prédicat ou des fonctions d’agrégation, ou pour comparer des données avec des valeurs stockées dans une autre table. Ces opérations peuvent être effectuées à l’aide du mot-clé IN ou ANY. Par exemple, cette requête permet de sélectionner uniquement les pays qui ne sont pas répertoriés dans la table indep_countries :

COUNTRY_NAME NOT IN (SELECT COUNTRY_NAME FROM indep_countries)

Remarque :

Les shapefiles et les autres sources de données fichier ne figurant pas dans une géodatabase ne prennent pas en charge les sous-requêtes. Les sous-requêtes qui sont effectuées sur des tables et des classes d’entités d’entreprise versionnées ne renvoient pas les entités qui sont stockées dans les tables de deltas. Les géodatabases fichier fournissent une prise en charge limitée des sous-requêtes, décrite dans cette section, alors que les géodatabases d’entreprise assurent leur prise en charge totale. Pour plus d’informations sur le jeu complet de fonctionnalités de sous-requête des géodatabases d’entreprise, reportez-vous à la documentation de votre SGBDR.

Cette requête renvoie les entités affichant une valeur GDP2006 supérieure à la valeur GDP2005 de n’importe quelle entité contenue dans les pays :

GDP2006 > (SELECT MAX(GDP2005) FROM countries)

La prise en charge des sous-requêtes dans les géodatabases fichier est limitée aux éléments suivants :

  • Sous-requêtes scalaires avec des opérateurs de comparaison. Une sous-requête scalaire renvoie une seule valeur, par exemple :
    GDP2006 > (SELECT MAX(GDP2005) FROM countries)
    Pour les géodatabases fichier, les fonctions Set AVG, COUNT, MIN, MAX et SUM peuvent être utilisées uniquement dans des sous-requêtes scalaires.
  • Prédicat EXISTS, par exemple :
    EXISTS (SELECT * FROM indep_countries WHERE COUNTRY_NAME = 'Mexico')

Opérateurs

Vous trouverez ci-après la liste complète des opérateurs de requête pris en charge par les géodatabases fichier, les fichiers de formes, les couvertures et les autres sources de données fichier. Ils sont également pris en charge par les géodatabases d’entreprise, bien que ces sources de données puissent exiger une syntaxe différente. Outre les opérateurs ci-après, les géodatabases d’entreprise prennent en charge d’autres fonctionnalités. Pour plus de détails, reportez-vous à la documentation de votre SGBDR.

Opérateurs arithmétiques

Vous utilisez un opérateur arithmétique pour additionner, soustraire, multiplier et diviser des valeurs numériques.

OpérateurDescription

*

Opérateur arithmétique pour la multiplication

/

Opérateur arithmétique pour la division

+

Opérateur arithmétique pour l’addition

-

Opérateur arithmétique pour la soustraction

Opérateurs arithmétiques

Opérateurs de comparaison

Vous utilisez des opérateurs de comparaison pour comparer une expression à une autre.

OpérateurDescription

<

Inférieur à. Cet opérateur peut être utilisé avec des chaînes (la comparaison est effectuée par ordre alphabétique), des nombres et des dates.

<=

Plus petit que ou égale à. Cet opérateur peut être utilisé avec des chaînes (la comparaison est effectuée par ordre alphabétique), des nombres et des dates.

<>

N’est pas égal à. Cet opérateur peut être utilisé avec des chaînes (la comparaison est effectuée par ordre alphabétique), des nombres et des dates.

>

Supérieur à. Cet opérateur peut être utilisé avec des chaînes (la comparaison est effectuée par ordre alphabétique), des nombres et des dates.

>=

Plus grand que ou égal à. Cet opérateur peut être utilisé avec des chaînes (la comparaison est effectuée par ordre alphabétique), des nombres et des dates.

IS [NOT] NULL

Sélectionne un enregistrement s’il a une valeur Null pour le champ spécifié. Quand NULL est précédé de NOT, sélectionne un enregistrement s’il comporte une valeur quelconque pour le champ spécifié.

Opérateurs de comparaison

Opérateurs logiques

Similaires aux opérateurs de comparaison, les opérateurs logiques testent la vérité de l’instruction et renvoient des valeurs vraies pour l’instruction donnée.

OpérateurDescription

ET

Combine deux conditions et sélectionne un enregistrement si les deux conditions sont vraies. Par exemple, l’expression suivante sélectionne toute maison avec une surface supérieure à 1500 pieds carrés et un garage pour plus de deux voitures :

AREA > 1500 AND GARAGE > 2

[NOT] BETWEEN x AND y

Sélectionne un enregistrement s’il a une valeur supérieure ou égale à x et inférieure ou égale à y. Quand cet opérateur est précédé de NOT, il sélectionne un enregistrement s’il contient une valeur en dehors de la plage spécifiée. Par exemple, cette expression sélectionne tous les enregistrements avec une valeur supérieure ou égale à 1 et inférieure ou égale à 10 :

OBJECTID BETWEEN 1 AND 10

C’est l’équivalent de l’expression suivante :

OBJECTID >= 1 AND OBJECTID <= 10

Cependant, l’expression comportant BETWEEN fournit de meilleures performances si vous interrogez un champ indexé.

[NOT] EXISTS

Renvoie la valeur TRUE (vrai) si la sous-requête renvoie au moins un enregistrement ; sinon la valeur FALSE (faux) est renvoyée. Par exemple, cette expression renvoie la valeur TRUE si le champ OJBECTID contient la valeur 50 :

EXISTS (SELECT * FROM parcels WHERE OBJECTID = 50)

L’opérateur EXISTS n’est pris en charge que dans les géodatabases fichier et d’entreprise.

[NOT] IN

Sélectionne un enregistrement s’il comporte dans un champ un élément parmi plusieurs chaînes ou valeurs. Quand cet opérateur est précédé de NOT, il sélectionne un enregistrement s’il ne contient pas un élément parmi plusieurs chaînes ou valeurs dans un champ. Voici par exemple une expression qui recherche quatre noms d’état :

STATE_NAME IN ('Alabama', 'Alaska', 'California', 'Florida')

x [NOT] LIKE y [ESCAPE ’escape-character’]

Pour effectuer une recherche à l’aide d’une chaîne partielle, utilisez l’opérateur LIKE (au lieu de l’opérateur =) et ajoutez des caractères génériques. Le symbole de pourcentage (%) signifie qu’il peut être remplacé par tout : un caractère, cent caractères ou aucun caractère. Par contre, pour effectuer une recherche avec un caractère générique représentant un seul caractère, utilisez le caractère de soulignement (_). Si vous devez accéder à des données d’un autre type, utilisez la fonction CAST. Par exemple, cette requête renvoie des nombres qui commencent par 8 à partir du champ de nombre entier SCORE_INT :

CAST (SCORE_INT AS VARCHAR(10)) LIKE '8%'

Pour inclure le symbole du pourcentage ou du caractère de soulignement dans la chaîne de recherche, utilisez le mot-clé ESCAPE afin de désigner un autre caractère comme caractère d’échappement, lequel indique à son tour que le caractère de pourcentage ou de soulignement suit immédiatement après. Par exemple, cette expression renvoie une chaîne contenant 10 %, par exemple, 10 % REMISE ou A10% :

AMOUNT LIKE '%10$%%' ESCAPE '$'

NON

Sélectionne un enregistrement s’il ne correspond pas à l’expression. Par exemple, l’expression suivante sélectionne tous les États sauf la Californie :

NOT STATE_NAME = 'California'

OU

Combine deux conditions et sélectionne un enregistrement si une condition au moins est vraie. Par exemple, l’expression suivante sélectionne toute maison avec une surface supérieure à 1500 pieds carrés ou un garage pour plus de deux voitures :

AREA > 1500 OR GARAGE > 2

Opérateurs logiques

Opérateurs de chaîne

OpérateurDescription

||

Renvoie une chaîne de caractères qui est le résultat de la concaténation de deux expressions de chaîne ou plus.

FIRST_NAME || MIDDLE_NAME || LAST_NAME

Fonctions

Vous trouverez ci-après la liste complète des fonctions prises en charge par les géodatabases fichier, les fichiers de formes, les couvertures et les autres sources de données fichier. Les fonctions sont également prises en charge par les géodatabases d’entreprise, bien que ces sources de données puissent exiger une syntaxe différente ou d’autres noms de fonction. Outre les fonctions ci-après, les géodatabases d’entreprise prennent en charge d’autres fonctionnalités. Pour plus de détails, reportez-vous à la documentation de votre SGBDR.

Fonctions de date

Toutes les fonctions de date renvoient une valeur de date.

Géodatabases fichier

FonctionDescription

CURRENT_DATE

Renvoie la date actuelle.

EXTRACT(extract_field FROM extract_source)

Renvoie la partie extract_field de extract_source. L’argument extract_source est une expression de date-heure (DATE, DateOnly, TimeOnly, TimestampOffset). L’argument extract_field peut être l’un des mots-clés suivants :YEAR, MONTH, DAY, HOUR, MINUTE ou SECOND, MILLISECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE.

CURRENT_TIME

Renvoie l’heure actuelle.

Fonctions de date de géodatabase fichier

Exemples de syntaxe pour EXTRACT pour une géodatabase fichier :

  • EXTRACT(YEAR from DateOnly) > 1951
  • EXTRACT(YEAR from DateTimestamp) > 1981
  • EXTRACT(YEAR from TimestampOffset) > 1981
  • EXTRACT(TIMEZONE_HOUR from timeStampOffset) > 3
  • EXTRACT(TIMEZONE_MINUTE from timeStampOffset) = 30

Géodatabases mobiles

FonctionDescription

CURRENT_DATE

Renvoie la date actuelle.

EXTRACT(extract_field, extract_source)

Renvoie la partie extract_field de extract_source. L’argument extract_source est une expression de date-heure (DATE, DateOnly, TimeOnly, TimestampOffset). L’argument extract_field peut être l’un des mots-clés suivants :YEAR, MONTH, DAY, HOUR, MINUTE ou SECOND, MILLISECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE.

CURRENT_TIME

Renvoie l’heure actuelle.

Fonctions de date de géodatabase mobile

Exemples de syntaxe pour EXTRACT pour une géodatabase mobile :

  • EXTRACT('YEAR', DateOnly) > 1951
  • EXTRACT('YEAR', DateTimestamp) > 1981
  • EXTRACT('YEAR', TimestampOffset) > 1981
  • EXTRACT('TIMEZONE_HOUR', timeStampOffset) > 3
  • EXTRACT('TIMEZONE_MINUTE', timeStampOffset) = 30

En savoir plus sur les types de données des champs de date et d’heure

Fonctions de chaîne

Les arguments signalés par string_exp peuvent représenter le nom d’une colonne, un littéral de chaîne de caractères ou le résultat d’une autre fonction scalaire dans lequel le type de données sous-jacent peut être représenté par un type de caractère.

Les arguments signalés par character_exp représentent des chaînes de caractères à longueur variable.

Les arguments signalés par start ou length peuvent représenter un littéral numérique ou le résultat d’une autre fonction scalaire dans lequel le type de données sous-jacent peut représenter un type numérique.

Ces fonctions de chaîne sont de base 1, c’est-à-dire que le premier caractère de la chaîne représente la valeur 1.

FonctionDescription

CHAR_LENGTH(string_exp)

Renvoie la longueur en caractères de l’expression de chaîne.

LOWER(string_exp)

Renvoie une chaîne égale à string_exp en convertissant toutes les majuscules en minuscules.

POSITION(character_exp IN character_exp)

Renvoie la position de la première expression de caractères dans la seconde expression de caractères. Le résultat se présente sous la forme d’une valeur numérique exacte avec une précision définie au niveau de l’implémentation et une échelle de zéro.

SUBSTRING(string_exp FROM start FOR length)

Renvoie une chaîne de caractères dérivée de string_exp, commençant à la position spécifiée par start pour les caractères length.

TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp)

Renvoie l’argument string_exp avec trim_character supprimé du début, de la fin ou des deux extrémités de la chaîne.

UPPER(string_exp)

Renvoie une chaîne égale à string_exp en convertissant tous les caractères minuscules en majuscules.

Fonctions de chaîne

Fonctions numériques

Toutes les fonctions numériques renvoient une valeur numérique.

Les arguments signalés par numeric_exp, float_exp ou integer_exp peuvent représenter le nom d’une colonne, le résultat d’une autre fonction scalaire ou un littéral numérique dans lequel le type de données sous-jacent peut être représenté sous forme de type numérique.

FonctionDescription

ABS(numeric_exp)

Renvoie la valeur absolue de numeric_exp.

ACOS(float_exp)

Renvoie l’arc cosinus de float_exp sous forme d’un angle exprimé en radians.

ASIN(float_exp)

Renvoie l’arc sinus de float_exp sous forme d’un angle exprimé en radians.

ATAN(float_exp)

Renvoie l’arc tangente de float_exp sous forme d’un angle exprimé en radians.

CEILING(numeric_exp)

Renvoie le plus petit nombre entier supérieur ou égal à numeric_exp.

COS(float_exp)

Renvoie le cosinus de float_expfloat_exp représente un angle exprimé en radians.

FLOOR(numeric_exp)

Renvoie le plus grand nombre entier inférieur ou égal à numeric_exp.

LOG(float_exp)

Renvoie le logarithme naturel de float_exp.

LOG10(float_exp)

Renvoie le logarithme de base 10 de float_exp.

MOD(integer_exp1, integer_exp2)

Renvoie le reste de la division de integer_exp1 par integer_exp2.

POWER(numeric_exp, integer_exp)

Renvoie la valeur de numeric_exp à la puissance integer_exp.

ROUND(numeric_exp, integer_exp)

Renvoie numeric_exp arrondi à integer_exp positions à droite de la virgule. Si integer_exp est négatif, numeric_exp est arrondi à |integer_exp| positions à gauche de la virgule.

SIGN(numeric_exp)

Renvoie un indicateur du signe de numeric_exp. Si numeric_exp est inférieur à zéro, la valeur -1 est renvoyée. Si numeric_exp est égal à zéro, la valeur 0 est renvoyée. Si numeric_exp est supérieur à zéro, la valeur 1 est renvoyée.

SIN(float_exp)

Renvoie le sinus de float_expfloat_exp représente un angle exprimé en radians.

TAN(float_exp)

Renvoie la tangente de float_expfloat_exp représente un angle exprimé en radians.

TRUNCATE(numeric_exp, integer_exp)

Renvoie numeric_exp tronqué à integer_exp positions à droite de la virgule. Si integer_exp est négatif, numeric_exp est tronqué à |integer_exp| positions à gauche de la virgule.

Fonctions numériques

Fonction CAST

La fonction CAST() convertit une valeur ou une expression d’un type de données à un autre type de données spécifié. La syntaxe est la suivante :

CAST (expression AS data_type(length))

  • expression est un paramètre obligatoire et peut être une valeur littérale ou une expression valide de n’importe quel type (par exemple, nom de colonne, variable) qui sera convertie.
  • data_type est un paramètre obligatoire et le mot-clé utilisé est le type de données résultant vers lequel l’expression sera convertie. Référez-vous à la table ci-dessous pour obtenir une liste des mots-clés à utiliser pour les types de données valides.
  • length est un paramètre facultatif et spécifie la longueur du type de données résultant.

Par exemple, dans certains scénarios, une opération de type chaîne de caractères peut être nécessaire, mais si les données sont stockées dans un champ de type numérique, la requête ne fonctionnera pas. Toutefois, à l’aide de la fonction CAST(), vous pouvez convertir le champ numérique en une chaîne de caractères pour une opération SQL. Ce code transforme le champ numérique SQLNUM en champ de texte, qui peut ensuite être utilisé dans une opération de texte.

CAST(SQLNUM AS CHARACTER(12))

Le tableau suivant contient les mots-clés à utiliser pour les conversions de type de données, lesquels peuvent être spécifiés en majuscules ou en minuscules.

Type de donnéesMot-clé

Entier long

  • INTEGER
  • INT

Entier court

  • SMALLINT

Flottant : nombres à virgule flottante à simple précision

  • REAL
  • La valeur par défaut de FLOAT [p] est 7, ce qui équivaut à REAL. p > 7 équivaut à DOUBLE PRECISION

Double (nombres à virgule flottante à double précision)

  • DOUBLE PRECISION
  • NUMERIC (p[,s])
  • DECIMAL (p[,s])

Chaîne

  • CHAR(n)
  • VARCHAR(n)
  • CHARACTER(n)

Datetime

  • Date
  • TIME
  • TIMESTAMP

Remarque :

  • p : précision
  • s : échelle
  • n : définit la longueur de la chaîne en caractères
  • ( ) : paramètre requis
  • [ ] : paramètre facultatif

Conversions de types de données prises en charge lors de l’utilisation de la fonction CAST

Exemples de fonction CAST

  • Exemple 1 :

    CAST(AREA AS INTEGER)

    La conversion de AREA qui est un type de données à virgule flottante, en INTEGER, renvoie un entier et tronque toute valeur de résultat après la virgule.

  • Exemple 2 :

    CAST(Rent AS FLOAT) + Utilities > 2000.45

    La conversion de Rent, qui est un type de données CHARACTER en type de données FLOAT où Utilities est également un type de données FLOAT

EsriCast

Les opérateurs SQLite CAST fonctionnent sur les types de données natifs. Toutefois, avec l’apparition de nouveaux types de champs ainsi que d’autres types de données non natifs, vous devez ajuster les opérateurs pour que SQLite fonctionne correctement. EsriCast a été développé pour permettre aux opérateurs SQLite qui sont nécessaires dans les géodatabases mobiles d’accéder aux divers types de données qui peuvent être utilisés dans ArcGIS AllSource et de les comprendre.

Exemple de syntaxe : EsriCast(expression, source_data_type, target_data_type)

Mots-clés pour les données EsriCast

Type de donnéesMot-clé EsriCast

Court

Entier 16 bits

Long

Entier 32 bits

Entier très grand

Entier 64 bits

Flottant

Flottant 32 bits

Double

Flottant 64 bits

Date Only (Date uniquement)

DateOnly

Time Only (Heure uniquement)

TimeOnly

Décalage date heure

Date

Date et heure

Date

Texte

Texte

Exemples de conversion de données EsriCast

Type de données en Type de donnéesSyntaxe EsriCast

Court en Long

EsriCast(FC_Short_Data,'int16','int32')

Entier très grand en Court

EsriCast(FC_BigInteger_Data, 'int64', 'int16')

Flottant en Double

EsriCast(FC_Float_Data, 'float32', 'float64')

Date et heure en Date uniquement

EsriCast(FC_DateTime_Data, 'date', 'dateonly')

Heure uniquement en Décalage de l’horodatage

EsriCast(FC_TimeOnly_Data, 'timeonly', 'timestamp')

Texte en Court

EsriCast(FC_Text_Data, 'text', 'int16')