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 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 , GeoPackage, et Excel utilisent le dialecte SQL SQLite.
  • Les bases de données ou géodatabases d’entreprise utilisent la syntaxe SQL du SGBDR sous-jacent, comme Oracle, 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 Pro, 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 table vous est proposée.

La clause WHERE est la partie suivante de l’expression SQL venant après SELECT * FROM <Layer_name>. 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 des colonnes dans 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'

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'

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%'

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 système de gestion de bases de données(SGBD) 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

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 SGBD 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 un champ 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, veillez à utiliser 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 une source de données de géodatabase fichier :

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

Remarque :

les dates sont stockées dans la base de données sous-jacente comme référence au 30 décembre 1899 à 00:00:00. Cette règle s'applique pour toutes les sources de données répertoriées ici.

Cette section sert uniquement à vous aider dans vos recherches de dates et non d’heures. 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 d’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. Cette méthode convient dans la plupart des cas, mais elle présente 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 pour les géodatabases d'entreprise

Oracle

Datefield = date 'yyyy-mm-dd'

N’oubliez pas que ce format ne renvoie aucun enregistrement dont l’heure n’est pas nulle.

Oracle propose un autre format d’interrogation des dates, qui est le suivant :

Datefield = TO_DATE('yyyy-mm-dd hh:mm:ss','YYYY-MM-DD HH24:MI:SS')

Le second paramètre 'YYYY-MM-DD HH24:MI:SS' décrit le format utilisé pour la requête. Une requête se présente sous la forme suivante :

Datefield = TO_DATE('2003-01-08 14:35:00','YYYY-MM-DD HH24:MI:SS')

Vous pouvez utiliser une version abrégée :

TO_DATE('2003-11-18','YYYY-MM-DD')

De même, ce format ne renvoie aucun enregistrement dont l’heure n’est pas nulle.

SQL Server

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

La partie hh:mm:ss de la requête peut être omise lorsque l'heure n'est pas définie dans les enregistrements.

Voici une alternative de format :

Datefield = 'mm/dd/yyyy'

IBM Db2

Datefield = TO_DATE('yyyy-mm-dd hh:mm:ss','YYYY-MM-DD HH24:MI:SS')

La partie hh:mm:ss de la requête ne peut pas être omise même si l'heure est égale à 00:00:00.

PostgreSQL

Datefield = TIMESTAMP 'YYYY-MM-DD HH24:MI:SS'
Datefield = TIMESTAMP 'YYYY-MM-DD'

Vous devez spécifier l’horodatage complet avec des requêtes de type égal à, sinon aucun enregistrement n’est renvoyé. Vos requêtes peuvent aboutir avec les instructions suivantes, si la table que vous interrogez contient des enregistrements de date avec ces paramètres d’horodatage exacts (2007-05-29 00:00:00 ou 2007-05-29 12:14:25) :

select * from table where date = '2007-05-29 00:00:00';

ou

select * from table where date = '2007-05-29 12:14:25';

Si vous utilisez d’autres opérateurs, tels que supérieur à, inférieur à, supérieur ou égal ou inférieur ou égal à, vous n’avez pas besoin d’indiquer l’heure, bien que ce soit possible pour ajouter ce niveau de précision. Les deux instructions suivantes fonctionnent :

select * from table where date < '2007-05-29';
select * from table where date < '2007-05-29 12:14:25';

Géodatabases fichier, fichier de formes, couvertures et autres sources de données fichier

Datefield = date '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 = date 'yyyy-mm-dd hh:mm:ss'

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

Remarque :

Le SQL utilisé par la géodatabase fichier est basé sur le SQL-92 standard.

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, par exemple les données 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 cet opérateur 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 également 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)

En mode d'édition SQL, vous pouvez ajouter des parenthèses en les saisissant directement ou utiliser les commandes Grouper et 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 SGBD.

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 SGBD.

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.

[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 avec 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)

EXISTS est pris en charge dans les géodatabases fichier et d'entreprise uniquement.

[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')

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é.

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 pour 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 '$'

Opérateurs de comparaison

Opérateurs logiques

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

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

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'

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 SGBD.

Fonctions de date

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 désigne une expression de date-heure. L’argument extract_field peut correspondre à l’un des mots-clés suivants : YEAR, MONTH, DAY, HOUR, MINUTE ou SECOND.

CURRENT_TIME

Renvoie l'heure actuelle.

Fonctions de date

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

Rubriques connexes