Fonction
Spécifie une condition de recherche associée à une clause WHERE, HAVING ou CHECK, à une phrase ON
d'une jointure ou à une expression IF.
Syntaxe
condition_recherche :
expression comparé_à expression
| expression comparé_à { [ ANY | SOME] | ALL } ( sous-requête )
| expression IS [ NOT ] NULL
| expression [ NOT ] BETWEEN expression AND expression
| expression [ NOT ] LIKE expression [ ESCAPE expression ]
| expression [ NOT ] IN ( { expression
| sous-requête
| valeur_expr1 , … } )
| EXISTS ( sous-requête )
| NOT condition
| condition_recherche AND condition_recherche
| condition_recherche OR condition_recherche
| ( condition_recherche )
| ( condition_recherche , estimation )
| condition_recherche IS [ NOT ] { TRUE | FALSE | UNKNOWN}
| opération_trigger
Paramètres
comparée_à :
= | > | < | >= | <= | <> | != | !< | !>
opération_trigger :
INSERTING | DELETING
| UPDATING( chaîne_nom_colonne ) | UPDATE( nom_colonne )
Utilisation
Tout contexte.
Autorisations
Vous devez être connecté à la base de données.
Effets secondaires
Aucun.
Description
Les conditions de recherche permettent de sélectionner un sous-ensemble de lignes d'une table, ou sont
utilisées au sein d'une instruction de contrôle telle qu'une instruction IF pour déterminer le contrôle des flux.
Dans le langage SQL, chaque condition est considérée comme TRUE, FALSE ou UNKNOWN. Il s'agit
d'une logique ternaire. Le résultat d'une comparaison est UNKNOWN si l'une des valeurs comparée est
NULL. Vous trouverez dans la section “Logique ternaire”, à la page 31 des combinaisons d'opérateurs
logiques au sein de la logique ternaire.
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 23
Les lignes satisfont une condition de recherche si et seulement si le résultat de la condition est TRUE. En
revanche, les lignes ne remplissent pas une condition dont le résultat est UNKNOWN ou FALSE. Pour plus
d'informations sur la valeur NULL, reportez-vous à “Valeur NULL”, à la page 48.
Les sous-requêtes constituent une classe importante d'expressions utilisées dans un grand nombre de
conditions de recherche. Pour plus d'informations sur l'utilisation des sous-requêtes dans les conditions de
recherche, reportez-vous à la section “Sous-requêtes dans des conditions de recherche”, à la page 24.
Les différents types de condition de recherche sont abordés dans les sections suivantes.
Voir aussi
♦ “Expressions”, à la page 17
Sous-requêtes dans des conditions de recherche
Les sous-requêtes renvoyant exactement une colonne et zéro ou une ligne peuvent être utilisées dans toute
instruction SQL, chaque fois qu'il est possible d'utiliser un nom de colonne, y compris au milieu d'une
expression.
Par exemple, il est possible de comparer des expressions à des sous-requêtes dans des conditions de
comparaison (reportez-vous à la section “Opérateurs de comparaison”, à la page 12) tant que la sous-requête
ne renvoie pas plus d'une ligne. Si la sous-requête (qui doit comporter exactement une colonne) renvoie une
ligne, la valeur associée à cette ligne est alors comparée à l'expression. Si la sous-requête ne renvoie aucune
ligne, sa valeur est NULL.
Les sous-requêtes renvoyant exactement une colonne et un nombre quelconque de lignes peuvent être
utilisées dans des conditions de recherche IN, ANY, ALL et SOME. Celles qui renvoient un nombre
quelconque de lignes et de colonnes s'utilisent dans des conditions de recherche EXISTS. Ces conditions de
recherche sont développées dans les sections ci-après.
Conditions de recherche ALL, ANY et SOME
Condition de recherche ANY
La syntaxe de la condition de recherche ANY est la suivante :
expression opérateur_comparaison ANY ( sous-requête )
où opérateur_comparaison est l'un des opérateurs suivants : <=, =, <, >, >=, <>, !<, !> ou !=.
Le mot-clé SOME est synonyme de ANY.
Dans une condition de recherche ANY, si le jeu de résultats de la sous-requête est vide, la condition de
recherche donne le résultat FALSE. Sinon, elle donne le résultat TRUE, FALSE ou UKNOWN, selon la
valeur d'expression et du jeu de résultats renvoyé par la sous requête, comme décrit ci-après :
Eléments du langage SQL
24 Copyright © 2006, iAnywhere Solutions, Inc.
Si la valeur de l'expression
est...
et si le jeu de résultats renvoyé
par la sous-requête contient au
moins une valeur NULL, alors...
ou si le jeu de résultats renvoyé
par la sous-requête ne contient
aucune valeur NULL, alors...
NULL UNKNOWN UNKNOWN
NOT NULL Si le jeu de résultats de la sousrequête
contient au moins une valeur
pour laquelle le résultat de la
comparaison avec la valeur de
l'expression est TRUE, la condition
de recherche donne le résultat
TRUE. Sinon, elle donne le résultat
UNKNOWN.
Si le jeu de résultats de la sousrequête
contient au moins une valeur
pour laquelle le résultat de la
comparaison avec la valeur de
l'expression est TRUE, la condition
de recherche donne le résultat
TRUE. Sinon, elle donne le résultat
FALSE.
Par exemple, une condition de recherche ANY avec un opérateur d'égalité,
expression = ANY ( sous-requête )
donne le résultat TRUE si expression est égal à l'une des valeurs du résultat de la sous-requête, et FALSE
si la valeur de l'expression n'est pas NULL et ne correspond à aucune valeur du résultat de la sous-requête
et si le jeu de résultats ne contient pas de valeurs NULL.
Remarque
=ANY est équivalent au mot-clé IN.
Condition de recherche ALL
La syntaxe de la condition de recherche ALL est la suivante :
expression opérateur_comparaison ALL ( sous-requête )
où opérateur_comparaison est l'un des opérateurs suivants : <=, =, <, >, >=, <>, !<, !> ou !=.
Dans une condition de recherche ALL, si la valeur du jeu de résultats de la sous-requête est un jeu vide, la
condition de recherche donne le résultat FALSE. Sinon, elle donne le résultat TRUE, FALSE ou UKNOWN,
selon la valeur d'expression et du jeu de résultats renvoyé par la sous requête, comme décrit ci-après :
Si la valeur de l'expression
est...
et si le jeu de résultats renvoyé
par la sous-requête contient au
moins une valeur NULL, alors...
ou si le jeu de résultats renvoyé
par la sous-requête ne contient
aucune valeur NULL, alors...
NULL UNKNOWN UNKNOWN
NOT NULL Si le jeu de résultats de la sousrequête
contient au moins une valeur
pour laquelle le résultat de la
comparaison avec la valeur de
l'expression est FALSE, la condition
de recherche donne le résultat
FALSE. Sinon, elle donne le résultat
UNKNOWN.
Si le jeu de résultats de la sousrequête
contient au moins une valeur
pour laquelle le résultat de la
comparaison avec la valeur de
l'expression est FALSE, la condition
de recherche donne le résultat
FALSE. Sinon, elle donne le résultat
TRUE.
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 25
Condition de recherche BETWEEN
La syntaxe de la condition de recherche BETWEEN est la suivante :
expr [ NOT ] BETWEEN début_expr AND fin_expr
La condition de recherche BETWEEN peut donner le résultat TRUE, FALSE ou UNKNOWN. En l'absence
du mot-clé NOT, le résultat de la condition de recherche est TRUE si expr est compris entre début_expr et
fin_expr. Le mot-clé NOT inverse le sens de la condition de recherche, la valeur UNKNOWN demeurant
inchangée.
La condition de recherche BETWEEN équivaut à la combinaison de deux inégalités :
[ NOT ] ( expr >= début_expr AND expr <= fin_expr )
Condition de recherche LIKE
La syntaxe de la condition de recherche LIKE est la suivante :
expression [ NOT ] LIKE masque [ ESCAPE expression_échappement]
La condition de recherche LIKE peut donner le résultat TRUE, FALSE ou UNKNOWN.
En l'absence du mot-clé NOT, le résultat de la condition de recherche est TRUE si expression correspond à
la valeur de masque. Si la valeur d'expression ou de masque est NULL, cette condition de recherche génère
le résultat UNKNOWN. Le mot-clé NOT inverse le sens de la condition de recherche, la valeur UNKNOWN
demeurant inchangée.
Le masque peut contenir un nombre quelconque de caractères joker. Ces caractères sont les suivants :
Caractère joker Correspondance
_ (tiret bas) N'importe quel caractère, par exemple a_
% (pourcentage) Toute chaîne constituée de zéro, un ou plusieurs caractères, par exemple bl%
[] Tout caractère unique appartenant à l'intervalle ou à l'ensemble spécifié, par
exemple T[oi]m
[^] Tout caractère unique n'appartenant pas à l'intervalle ou à l'ensemble spécifié,
par exemple 'M[^c]%'
Tous les autres caractères doivent correspondre exactement.
Par exemple, la condition de recherche :
... name LIKE 'a%b_'
est vraie (TRUE) pour toute ligne dans laquelle name commence par la lettre a et dont l'avant-dernier
caractère est la lettre b.
Si vous spécifiez expression_échappement, cette expression doit générer un caractère unique. Ce caractère
peut précéder un symbole pourcentage, un tiret bas, un crochet gauche ou un autre caractère d'échappement
Eléments du langage SQL
26 Copyright © 2006, iAnywhere Solutions, Inc.
du masque, afin d'empêcher le caractère spécial d'être associé à une signification particulière. Dans ce cas,
un symbole pourcentage correspondra effectivement à un symbole pourcentage et un tiret bas, à un tiret bas.
Les masques d'une longueur de 126 caractères au plus sont pris en charge. Ceux dont la longueur dépasse
254 caractères sont rejetés. Suivant leur contenu, certains masques, d'une longueur comprise entre 127 et
254 caractères, sont néanmoins pris en charge.
Recherche d'un caractère dans un ensemble
Pour spécifier un ensemble de caractères à rechercher, saisissez les caractères voulus entre crochets.
Par exemple, la condition de recherche suivante reconnaît les chaînes smith et smyth :
LIKE 'sm[iy]th'
Recherche d'un caractère dans un intervalle
Pour spécifier un intervalle de caractères à rechercher, il vous suffit d'indiquer les limites de cet intervalle
entre crochets, en les séparant par un tiret. Par exemple, la condition de recherche suivante recherche les
chaînes bough et rough, mais pas tough :
LIKE '[a-r]ough'
L'intervalle de caractères [a-z] est interprété comme "supérieur ou égal à a et inférieur ou égal à z", les
opérations "supérieur à" et "inférieur à" étant effectuées suivant l'ordre de tri de la base de données. Pour
plus d'informations sur l'ordre des caractères dans un classement, reportez-vous à la section “Langues
internationales et jeux de caractères” dans le manuel SQL Anywhere Server - Administration des bases de
données.
La limite inférieure de l'intervalle doit précéder la limite supérieure. Par exemple, une condition de recherche
LIKE contenant l'expression [z-a] ne renvoie aucune ligne, puisqu'il n'existe pas de correspondance de
caractères avec l'intervalle [z-a].
Les intervalles de caractères ne tiennent pas compte de la distinction majuscules/minuscules, à moins que
celle-ci n'ait été définie lors de la création de la base de données. Par exemple, la condition de recherche
suivante recherche les chaînes Bough, rough et TOUGH :
LIKE '[a-z]ough'
Si la distinction majuscules/minuscules a été définie lors de la création de la base de données, la condition
de recherche opère également cette distinction. Pour effectuer une recherche sans distinction majuscules/
minuscules dans une base de données où cette distinction est définie, vous devez inclure des caractères en
majuscules et en minuscules. Par exemple, la condition de recherche suivante recherche les chaînes Bough,
rough et TOUGH :
LIKE '[a-zA-Z][oO][uU][gG][hH]'
Recherches combinant des intervalles et des ensembles
Vous avez la possibilité de combiner des intervalles et des ensembles à l'intérieur de crochets. Par exemple,
la condition de recherche suivante recherche les chaînes bough, rough et tough :
... LIKE '[a-rt]ough'
L'expression entre crochets [a-rt] est interprétée comme "un seul caractère compris dans l'intervalle a à r
inclus, ou égal à t".
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 27
Exclusion de caractères
L'accent circonflexe (^) permet de spécifier un intervalle de caractères à exclure de la recherche. Par exemple,
la condition de recherche suivante recherche la chaîne tough, mais pas les chaînes rough ni bough :
... LIKE '[^a-r]ough'
L'accent circonflexe a valeur de négation par rapport à l'expression qu'il précède dans les crochets. Par
exemple, l'expression entre crochets [^a-rt] est interprétée comme "un seul caractère non compris dans
l'intervalle a à r inclus, et différent de t".
Cas particuliers
Tout caractère unique entre crochets représente le caractère spécifié. Par exemple, [a] correspond seulement
au caractère a. [^] correspond à l'accent circonflexe, [%] au symbole pourcentage (qui ne joue pas ici le rôle
de caractère joker) et [_] au tiret de soulignement. En outre, [[] correspond seulement au caractère [.
Voici d'autres cas particuliers :
♦ L'expression [a-] correspond au caractère a ou -.
♦ L'expression [] n'a pas de correspondance et ne renvoie aucune ligne.
♦ Les expressions [ et [abp-q sont erronées et entraînent des erreurs de syntaxe.
♦ Vous ne pouvez pas utiliser de caractères joker dans les crochets. L'expression [a%b] recherche a, % ou
b.
♦ L'accent circonflexe ne permet d'exclure un intervalle que s'il est placé en tête de l'expression entre
crochets. L'expression [a^b] recherche a, ^ ou b.
Masques de recherche comportant des blancs en fin de chaîne
Si votre masque de recherche comporte des blancs en fin de chaîne, SQL Anywhere ne met le masque en
correspondance qu'avec les valeurs contenant des blancs, c'est-à-dire qu'il ne remplit pas les chaînes à l'aide
de blancs. Par exemple, les masques de recherche '90 ', '90[ ]' et '90_' correspondent à la valeur '90 ', mais
pas à '90', même si la valeur testée figure dans une colonne de type CHAR ou VARCHAR large d'au moins
trois caractères.
Bases de données complétées par des blancs
Un masque LIKE dans un prédicat LIKE est une représentation de masque de correspondance dont la
sémantique ne change pas selon que la base de données est complétée par des blancs ou non. La mise en
correspondance d'une expression avec un masque LIKE implique une correspondance caractère par caractère
d'une valeur avec le masque LIKE, de gauche à droite. Aucun remplissage supplémentaire par des blancs
n'est effectué sur la valeur ou l'expression au cours de l'évaluation. Ainsi, l'expression 'a' correspondra au
masque LIKE 'a', mais pas aux masques LIKE 'a ' (a, suivi d'un espace) ni 'a_'.
Normes et compatibilité
♦ La clause ESCAPE n'est supportée que par SQL Anywhere.
Eléments du langage SQL
28 Copyright © 2006, iAnywhere Solutions, Inc.
Condition de recherche IN
La syntaxe de la condition de recherche IN est la suivante :
expression [ NOT ] IN { ( sous-requête ) | ( expression2 ) | ( valeur_expr, … ) }
Une condition de recherche IN, sans le mot-clé NOT, s'évalue selon les règles suivantes :
♦ TRUE si expression n'est pas NULL et est égale à au moins une des valeurs.
♦ UNKNOWN si expression est NULL et la liste de valeurs n'est pas vide, ou si au moins une des valeurs
est NULL et expression n'est égale à aucune des autres valeurs.
♦ FALSE si expression est NULL et sous-requête ne renvoie aucune valeur ; ou si expression n'est pas
NULL, aucune des valeurs n'est NULL et expression n'est égale à aucune des valeurs.
Le mot-clé NOT intervertit TRUE et FALSE.
La condition de recherche expression IN ( valeurs ) est identique à expression = ANY ( valeurs ).
La condition de recherche expression NOT IN (valeurs ) est identique à expression <> ALL ( valeurs ).
Les arguments valeur_expr sont des expressions qui prennent une seule valeur, pouvant être une chaîne, un
nombre, une date ou tout autre type de données SQL.
Condition de recherche EXISTS
La syntaxe de la condition de recherche EXISTS est la suivante :
EXISTS( sous-requête )
La condition de recherche EXISTS renvoie la valeur TRUE si le résultat de la sous-requête contient au moins
une ligne et la valeur FALSE s'il n'en contient aucune. Le résultat de la condition de recherche EXISTS ne
peut pas être UNKNOWN.
Conditions de recherche IS NULL et IS NOT NULL
La syntaxe de la condition de recherche IS NULL est la suivante :
expression IS [ NOT ] NULL
En l'absence du mot-clé NOT, le résultat de la condition de recherche IS NULL est TRUE si la valeur de
l'expression est NULL ; dans le cas contraire, il prend la valeur FALSE. Le mot-clé NOT inverse le sens de
la condition de recherche.
Conditions de recherche à valeurs de vérité
La syntaxe des conditions de recherche à valeurs de vérité est la suivante :
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 29
IS [ NOT ] valeur_vérité
En l'absence du mot-clé NOT, la condition est vraie (TRUE) si elle génère comme résultat la valeur_vérité
indiquée, qui doit être TRUE, FALSE ou UNKNOWN. Sinon, la condition est fausse (FALSE). Le mot-clé
NOT inverse le sens de la condition de recherche, la valeur UNKNOWN demeurant inchangée.
Normes et compatibilité
♦ Extension propriétaire.
Conditions d'opération de trigger
La syntaxe de la condition d'opération de trigger est la suivante :
opération_trigger :
INSERTING | DELETING
| UPDATING( chaîne_nom_colonne ) | UPDATE( nom_colonne )
Les conditions d'opération de trigger ne peuvent être utilisées que dans les triggers, afin de réaliser des actions
qui dépendent du type d'action qui a déclenché le trigger.
L'argument pour UPDATING est une chaîne entre guillemets (par exemple, UPDATING
( 'mycolumn' )). L'argument pour UPDATE est un identificateur (par exemple, UPDATE
( mycolumn )). Les deux versions sont interopérables et sont incluses pour des raisons de compatibilité
dans les dialectes SQL des SGBD d'autres éditeurs.
Si vous indiquez une fonction UPDATING ou UPDATE, vous devez aussi indiquer une clause
REFERENCING dans l'instruction CREATE TRIGGER pour éviter des erreurs de syntaxe.
Exemple
Le trigger ci-après affiche un message montrant l'action qui a déclenché le trigger.
CREATE TRIGGER tr BEFORE INSERT, UPDATE, DELETE
ON sample_table
REFERENCING OLD AS t1old
FOR EACH ROW
BEGIN
DECLARE msg varchar(255);
SET msg = 'This trigger was fired by an ';
IF INSERTING THEN
SET msg = msg || 'insert'
ELSEIF DELETING THEN
set msg = msg || 'delete'
ELSEIF UPDATING THEN
set msg = msg || 'update'
END IF;
MESSAGE msg TO CLIENT
END
Eléments du langage SQL
30 Copyright © 2006, iAnywhere Solutions, Inc.
Logique ternaire
Les tableaux ci-après montrent le fonctionnement des opérateurs logiques AND, OR, NOT et IS de SQL
dans la logique ternaire.
Opérateur AND
AND TRUE FALSE UNKNOWN
TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
UNKNOWN UNKNOWN FALSE UNKNOWN
Opérateur OR
OR TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN
Opérateur NOT
TRUE FALSE UNKNOWN
FALSE TRUE UNKNOWN
Opérateur IS
IS TRUE FALSE UNKNOWN
TRUE TRUE FALSE FALSE
FALSE FALSE TRUE FALSE
UNKNOWN FALSE FALSE TRUE
Estimation de sélectivité explicite
SQL Anywhere utilise des informations statistiques pour décider de la meilleure stratégie à adopter pour
chaque instruction. SQL Anywhere collecte et actualise automatiquement ces statistiques. Ces statistiques
sont stockées en permanence dans la base de données, dans la table système ISYSCOLSTAT. Les statistiques
réunies pendant le traitement d'une instruction sont à votre disposition si vous recherchez une manière
efficace d'exécuter les instructions suivantes.
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 31
Il arrive que les statistiques ne soient plus exactes ou que les statistiques pertinentes ne soient pas disponibles.
C'est une condition susceptible de se produire lorsqu'un petit nombre de requêtes ont été exécutées après
l'ajout, la mise à jour ou la suppression d'une grande quantité de données. Dans ce cas, vous pouvez exécuter
une instruction CREATE STATISTICS.
En cas de problème avec un plan d'exécution spécifique, vous pouvez utiliser les directives d'optimisation
pour exiger l'utilisation d'un index particulier. Pour plus d'informations, reportez-vous à la section “Clause
FROM”, à la page 562.
Dans de rares cas cependant, ces mesures peuvent se révéler inefficaces. Vous améliorerez alors les
performances en fournissant des estimations de sélectivité explicites.
Pour chaque table intervenant dans un plan d'exécution, l'optimiseur doit estimer le nombre de lignes qui
seront renvoyées. Si vous savez qu'une condition présente un taux de réussite différent de l'estimation de
l'optimiseur, vous pouvez indiquer de manière explicite une estimation utilisateur dans la condition de
recherche.
L'estimation s'exprime en pourcentage. Elle peut être représentée par un nombre entier ou des fractions.
Attention
Si possible, évitez de fournir des estimations explicites dans des instructions utilisées de manière continue.
Si les données changent, l'estimation explicite risque d'être inexacte et d'entraîner la génération de plans peu
performants. Si vous utiliser des estimations de sélectivité explicites, assurez-vous que le nombre est exacte.
Par exemple, ne fournissez pas les valeurs 0 % ou 100 % pour imposer l'utilisation d'un index.
Vous pouvez désactiver les estimations utilisateur en attribuant la valeur Off à l'option de base de données
user_estimates. La valeur par défaut de user_estimates est Override-Magic, ce qui signifie que les estimations
de sélectivité fournies par l'utilisateur ne sont employées que dans les cas où l'optimiseur utiliserait une
valeur de sélectivité MAGIC (valeur par défaut) pour la condition. L'optimiseur n'utilise des valeurs MAGIC
qu'en dernier ressort, lorsqu'il est incapable de prévoir précisément la sélectivité d'un prédicat.
F Pour plus d'informations sur la désactivation des estimations de sélectivité définies par l'utilisateur,
reportez-vous à la section “Option user_estimates [base de données]” dans le manuel SQL Anywhere Server
- Administration des bases de données.
F Pour plus d'informations sur les statistiques, reportez-vous à la section “Statistiques de colonne et
estimations de l'optimiseur” dans le manuel SQL Anywhere Server - Utilisation du SQL.
Exemple
♦ La requête ci-dessous fournit une estimation selon laquelle 1 % des valeurs ShipDate seront postérieures
au 2001/06/30 :
SELECT ShipDate
FROM SalesOrderItems
WHERE ( ShipDate > '2001/06/30', 1 )
ORDER BY ShipDate DESC
♦ La requête ci-dessous estime que 50 % des lignes vont satisfaire la condition.
Eléments du langage SQL
32 Copyright © 2006, iAnywhere Solutions, Inc.
SELECT *
FROM Customers c, SalesOrders o
WHERE (c.ID = o.CustomerID, 0.5)
Les fractions augmentent la précision des estimations de l'utilisateur pour les jointures, en particulier s'il
s'agit de tables volumineuses.
Conditions de recherche
Copyright © 2006, iAnywhere Solutions, Inc. 33
Valeurs spéciales
Les valeurs spéciales sont utilisables dans des expressions et comme valeurs par défaut de colonnes lors de
la création de tables.
Alors que certaines valeurs spéciales peuvent être interrogées, d'autres ne peuvent servir que de valeurs par
défaut pour les colonnes. Ainsi, user, last user, timestamp et UTC timestamp ne peuvent être utilisés que
comme valeur par défaut.
Valeur spéciale CURRENT DATABASE
Fonction
CURRENT DATABASE renvoie le nom de la base de données courante.
Type de données
STRING
Voir aussi
♦ “Expressions”, à la page 17
Valeur spéciale CURRENT DATE
Fonction
CURRENT DATE renvoie l'année, le mois et le jour courants.
Type de données
DATE
Voir aussi
♦ “Expressions”, à la page 17
♦ “TIME, type de données”, à la page 79
Valeur par défaut CURRENT PUBLISHER
Fonction
CURRENT PUBLISHER renvoie une chaîne qui contient l'ID utilisateur de l'éditeur de la base de données
pour des réplications SQL Remote.
Type de données
STRING
Eléments du langage SQL
34 Copyright © 2006, iAnywhere Solutions, Inc.
CURRENT PUBLISHER est utilisable comme valeur par défaut dans des colonnes ayant le type de données
caractère.
Voir aussi
♦ “Expressions”, à la page 17
♦ “Conception d'une installation SQL Remote” dans le manuel SQL Remote
Valeur spéciale CURRENT TIME
Fonction
Renvoie l'heure courante avec les minutes, les secondes et les fractions de seconde.
Type de données
TIME
Description
La précision des fractions de seconde est de 6 décimales. La précision de l'heure est limitée par la précision
de l'horloge système.
Voir aussi
♦ “Expressions”, à la page 17
♦ “TIME, type de données”, à la page 79
Valeur spéciale CURRENT TIMESTAMP
Fonction
Combine CURRENT DATE et CURRENT TIME pour former une valeur TIMESTAMP contenant l'année,
le mois, le jour, l'heure, les minutes, les secondes et les fractions de seconde. La précision des fractions de
seconde est de 3 décimales. La précision de l'heure est limitée par la précision de l'horloge système.
A la différence des colonnes déclarées avec DEFAULT TIMESTAMP, celles déclarées avec DEFAULT
CURRENT TIMESTAMP ne contiennent pas nécessairement des valeurs uniques. Si vous avez besoin de
valeurs uniques, utilisez plutôt DEFAULT TIMESTAMP.
Les informations renvoyées par CURRENT TIMESTAMP sont équivalentes aux informations renvoyées
par les fonctions GETDATE et NOW.
CURRENT_TIMESTAMP et CURRENT TIMESTAMP sont équivalents.
Remarque
La principale différence entre DEFAULT CURRENT TIMESTAMP et DEFAULT TIMESTAMP réside
dans le fait que DEFAULT CURRENT TIMESTAMP est défini uniquement au moment d'une opération
INSERT, alors que DEFAULT TIMESTAMP est défini au moment d'une opération INSERT et d'une
opération UPDATE.
Valeurs spéciales
Copyright © 2006, iAnywhere Solutions, Inc. 35
Type de données
TIMESTAMP
Voir aussi
♦ “Valeur spéciale CURRENT TIME”, à la page 35
♦ “Valeur spéciale TIMESTAMP”, à la page 38
♦ “Expressions”, à la page 17
♦ “Type de données TIMESTAMP”, à la page 79
♦ “GETDATE (fonction de date et d'heure)”, à la page 175
♦ “NOW (fonction de date et d'heure)”, à la page 216
Valeur spéciale CURRENT USER
Fonction
CURRENT USER renvoie une chaîne qui contient l'ID utilisateur de la connexion courante.
Type de données
STRING
CURRENT USER est utilisable comme valeur par défaut dans des colonnes ayant le type de données
caractère.
Description
Lors d'une instruction UPDATE, les colonnes ayant la valeur par défaut CURRENT USER ne sont pas
modifiées. CURRENT_USER et CURRENT USER sont équivalents.
Voir aussi
♦ “Expressions”, à la page 17
Valeur spéciale CURRENT UTC TIMESTAMP
Fonction
Combine CURRENT DATE et CURRENT TIME, modifiées par la valeur d'ajustement des fuseaux horaires
du serveur, pour former une valeur TIMESTAMP UTC (Coordinated Universal Time) contenant l'année, le
mois, le jour, l'heure, les minutes, les secondes et les fractions de seconde. Cette fonctionnalité permet de
saisir des données avec une référence horaire cohérente, quel que soit le fuseau horaire du lieu où les données
ont été saisies.
Type de données
TIMESTAMP
Voir aussi
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Valeur spéciale UTC TIMESTAMP”, à la page 39
Eléments du langage SQL
36 Copyright © 2006, iAnywhere Solutions, Inc.
♦ “Valeur spéciale CURRENT TIMESTAMP”, à la page 35
♦ “Option truncate_timestamp_values [base de données] [client MobiLink]” dans le manuel SQL
Anywhere Server - Administration des bases de données
Valeur spéciale LAST USER
Fonction
Nom du dernier utilisateur qui a modifié la ligne.
Type de données
STRING
LAST USER est utilisable comme valeur par défaut dans des colonnes ayant le type de données caractère.
Description
Lors d'une instruction INSERT, cette constante a les mêmes effets que CURRENT USER. Lors d'une
instruction UPDATE, si une colonne avec la valeur par défaut LAST USER n'est pas explicitement modifiée,
elle change et prend le nom de l'utilisateur courant.
Combinée avec DEFAULT TIMESTAMP, il est possible d'utiliser une valeur par défaut LAST USER pour
enregistrer (dans des colonnes distinctes) à la fois l'utilisateur et la date et l'heure auxquelles la ligne a été
modifiée pour la dernière fois.
Voir aussi
♦ “Valeur spéciale CURRENT USER”, à la page 36
♦ “Valeur spéciale CURRENT TIMESTAMP”, à la page 35
♦ “Instruction CREATE TABLE”, à la page 475
Valeur spéciale SQLCODE
Fonction
Valeur SQLCODE courante.
Type de données
STRING
Description
La valeur SQLCODE est définie après chaque instruction. Vous pouvez vérifier la valeur de SQLCODE
pour voir si l'instruction a abouti ou non.
Voir aussi
♦ “Expressions”, à la page 17
♦ SQL Anywhere 10 - Messages d'erreur dans le manuel SQL Anywhere 10 - Messages d'erreur.
Valeurs spéciales
Copyright © 2006, iAnywhere Solutions, Inc. 37
Valeur spéciale SQLSTATE
Fonction
Valeur SQLSTATE courante
Type de données
STRING
Description
La valeur SQLSTATE est définie après chaque instruction. Vous pouvez vérifier SQLSTATE pour voir si
l'instruction a abouti ou non.
Voir aussi
♦ “Expressions”, à la page 17
♦ SQL Anywhere 10 - Messages d'erreur dans le manuel SQL Anywhere 10 - Messages d'erreur
Valeur spéciale TIMESTAMP
Fonction
TIMESTAMP indique quand chaque ligne de la table a été modifiée pour la dernière fois. Lorsqu'une colonne
est déclarée avec DEFAULT TIMESTAMP, une valeur par défaut est fournie pour les insertions, et la valeur
est actualisée avec la date et l'heure courantes dès mise à jour de la ligne.
Type de données
TIMESTAMP
Description
Les colonnes déclarées avec DEFAULT TIMESTAMP contiennent des valeurs uniques pour permettre aux
applications de détecter des mises à jour quasi simultanées sur la même ligne. Si la valeur timestamp actuelle
est identique à la valeur la plus récente, elle est incrémentée de la valeur de l'option
default_timestamp_increment.
Dans SQL Anywhere, vous pouvez automatiquement tronquer des valeurs timestamp en fonction de l'option
default_timestamp_increment. Cette fonctionnalité permet d'assurer la compatibilité avec d'autres logiciels
de base de données qui enregistrent des valeurs TIMESTAMP moins précises.
La variable globale @@dbts renvoie une valeur TIMESTAMP représentant la dernière valeur générée pour
une colonne à l'aide de DEFAULT TIMESTAMP.
Remarque
La principale différence entre DEFAULT CURRENT TIMESTAMP et DEFAULT TIMESTAMP réside
dans le fait que DEFAULT CURRENT TIMESTAMP est défini uniquement au moment d'une opération
INSERT, alors que DEFAULT TIMESTAMP est défini au moment d'une opération INSERT et d'une
opération UPDATE.
Eléments du langage SQL
38 Copyright © 2006, iAnywhere Solutions, Inc.
Voir aussi
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Valeur spéciale CURRENT TIMESTAMP”, à la page 35
♦ “Valeur spéciale CURRENT UTC TIMESTAMP”, à la page 36
♦ “Option default_timestamp_increment [base de données] [MobiLink client]” dans le manuel SQL
Anywhere Server - Administration des bases de données
♦ “Option truncate_timestamp_values [base de données] [client MobiLink]” dans le manuel SQL
Anywhere Server - Administration des bases de données
Valeur spéciale USER
Fonction
USER renvoie une chaîne qui contient l'ID utilisateur de la connexion courante.
Type de données
STRING
USER est utilisable comme valeur par défaut dans des colonnes ayant le type de données caractère.
Description
Lors d'une instruction UPDATE, les colonnes ayant la valeur par défaut USER ne sont pas modifiées.
Voir aussi
♦ “Expressions”, à la page 17
♦ “Valeur spéciale CURRENT USER”, à la page 36
♦ “Valeur spéciale LAST USER”, à la page 37
Valeur spéciale UTC TIMESTAMP
Fonction
UTC TIMESTAMP indique l'heure UTC (Coordinated Universal Time) à laquelle chaque ligne a été
modifiée pour la dernière fois.
Lorsqu'une colonne est déclarée avec DEFAULT UTC TIMESTAMP, une valeur par défaut est fournie pour
les insertions, et la valeur est actualisée avec la date et l'heure UTC courantes dès mise à jour de la ligne.
Type de données
TIMESTAMP
Description
Les colonnes déclarées avec DEFAULT UTC TIMESTAMP contiennent des valeurs uniques pour permettre
aux applications de détecter des mises à jour quasi simultanées sur la même ligne. Si la valeur timestamp
UTC actuelle est identique à la valeur la plus récente, elle est incrémentée de la valeur de l'option
default_timestamp_increment.
Valeurs spéciales
Copyright © 2006, iAnywhere Solutions, Inc. 39
Dans SQL Anywhere, vous pouvez tronquer automatiquement des valeurs timestamp UTC avec l'option
default_timestamp_increment. Cette fonctionnalité permet d'assurer la compatibilité avec d'autres logiciels
de base de données qui enregistrent des valeurs timestamp moins précises.
Remarque
La principale différence entre DEFAULT UTC TIMESTAMP et DEFAULT CURRENT UTC
TIMESTAMP réside dans le fait que DEFAULT CURRENT UTC TIMESTAMP est défini uniquement au
moment d'une opération INSERT, alors que DEFAULT UTC TIMESTAMP est défini au moment d'une
opération INSERT et d'une opération UPDATE.
Voir aussi
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Valeur spéciale CURRENT UTC TIMESTAMP”, à la page 36
♦ “Valeur spéciale TIMESTAMP”, à la page 38
♦ “Option default_timestamp_increment [base de données] [MobiLink client]” dans le manuel SQL
Anywhere Server - Administration des bases de données
♦ “Option truncate_timestamp_values [base de données] [client MobiLink]” dans le manuel SQL
Anywhere Server - Administration des bases de données
Eléments du langage SQL
40 Copyright © 2006, iAnywhere Solutions, Inc.
Variables
SQL Anywhere supporte trois niveaux de variables :
♦ Variables locales Elles sont définies au sein d'une instruction composée dans une procédure ou dans
un batch utilisant l'instruction DECLARE. Elles n'existent qu'au sein de l'instruction composée.
♦ Variables de niveau connexion Elles sont définies via l'instruction CREATE VARIABLE. Elles
appartiennent à la connexion courante et disparaissent lorsque vous vous déconnectez de la base de
données ou si vous utilisez l'instruction DROP VARIABLE.
♦ Variables globales Ce sont des variables système dotées de valeurs fournies par le système. Chaque
variable globale est précédée de deux signes arrobas (@). Par exemple, la variable globale
@@version contient le numéro de version courant du serveur de base de données. Les utilisateurs ne
peuvent pas définir de variable globale.
Les variables locales et de niveau connexion sont déclarées par l'utilisateur et peuvent être utilisées dans les
instructions SQL des procédures et des batchs afin de stocker des informations. Les variables globales sont
des variables système dotées de valeurs fournies par le système.
Voir aussi
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Instruction CREATE VARIABLE”, à la page 494
Variables locales
SQL Anywhere supporte les variables locales. Les variables locales sont déclarées à l'aide de l'instruction
DECLARE, qui ne s'utilise qu'au sein d'une instruction composée (entourée par les mots-clés BEGIN et
END). Dans SQL Anywhere, une seule variable peut être déclarée pour chaque instruction DECLARE.
Si DECLARE est placé dans une instruction composée, sa portée se limite à cette instruction composée.
La variable a pour valeur initiale NULL. Pour redéfinir cette valeur, recourez à l'instruction SET, ou à
l'instruction SELECT accompagnée d'une clause INTO.
La syntaxe de l'instruction DECLARE est la suivante :
DECLARE variable-name data-type
Il est possible de passer des variables locales, en tant qu'arguments, à une procédure, sous réserve que l'appel
de procédure fasse partie intégrante de l'instruction composée.
Exemple
♦ Le batch ci-dessous illustre l'utilisation des variables locales.
BEGIN
DECLARE local_var INT;
SET local_var = 10;
MESSAGE 'local_var = ', local_var TO CLIENT;
END
Variables
Copyright © 2006, iAnywhere Solutions, Inc. 41
L'exécution de ce batch à partir d'Interactive SQL renvoie le message local_var = 10 dans l'onglet
Messages d'Interactive SQL.
♦ La variable local_var n'existe pas en dehors de l'instruction composée dans laquelle elle est déclarée. Le
batch ci-après est incorrect et génère l'erreur La colonne est introuvable :
-- This batch is invalid.
BEGIN
DECLARE local_var INT;
SET local_var = 10;
END;
MESSAGE 'local_var = ', local_var TO CLIENT;
♦ L'exemple suivant illustre l'utilisation de l'instruction SELECT avec une clause INTO pour définir la
valeur d'une variable locale :
BEGIN
DECLARE local_var INT;
SELECT 10 INTO local_var;
MESSAGE 'local_var = ', local_var TO CLIENT;
END
L'exécution de ce batch à partir d'Interactive SQL affiche le message local_var = 10 dans la fenêtre
de messages du serveur.
Pour plus d'informations sur les batchs et la portée des variables locales, reportez-vous à la section “Variables
dans les procédures Transact-SQL” dans le manuel SQL Anywhere Server - Utilisation du SQL.
Variables de niveau connexion
Les variables de niveau connexion sont déclarées via l'instruction CREATE VARIABLE. Il est possible de
passer des variables de niveau connexion, en tant que paramètres, à des procédures.
La syntaxe de l'instruction CREATE VARIABLE est la suivante :
CREATE VARIABLE variable-name data-type
Lorsque vous créez une variable, sa valeur initiale est NULL. La valeur des variables de niveau connexion
se définit de la même manière que celle des variables locales, à l'aide de l'instruction SET, ou de l'instruction
SELECT accompagnée d'une clause INTO.
Les variables de niveau connexion existent jusqu'à ce que la connexion soit interrompue ou que vous les
supprimiez explicitement par le biais de l'instruction DROP VARIABLE. L'instruction suivante permet de
supprimer la variable con_var :
DROP VARIABLE con_var
Exemple
♦ Le batch d'instructions SQL ci-après illustre l'utilisation des variables de niveau connexion :
CREATE VARIABLE con_var INT;
SET con_var = 10;
MESSAGE 'con_var = ', con_var TO CLIENT;
Eléments du langage SQL
42 Copyright © 2006, iAnywhere Solutions, Inc.
L'exécution de ce batch à partir d'Interactive SQL affiche le message con_var = 10 dans la fenêtre
de messages du serveur.
Variables globales
Les valeurs des variables globales sont définies par le serveur de base de données. Par exemple, la variable
globale @@version contient le numéro de version courant du serveur de base de données.
Les variables globales se distinguent des variables locales et de niveau connexion par les deux signes @ qui
précèdent leurs noms. Par exemple, @@error et @@rowcount sont des variables globales. Les utilisateurs
n'ont pas la possibilité de créer des variables globales ni de modifier leur valeur directement.
Certaines variables globales, telles que @@identity, contiennent des informations relatives à la connexion.
Leurs valeurs sont donc spécifiques de la connexion. D'autres, par contre, telles que @@connections, ont
des valeurs communes à toutes les connexions.
Variables globales et constantes spéciales
Les constantes spéciales (par exemple, CURRENT DATE, CURRENT TIME, USER et SQLSTATE) sont
similaires aux variables globales.
L'instruction suivante permet d'extraire une valeur de la variable globale relative à la version :
SELECT @@version;
Dans les procédures et les triggers, vous pouvez affecter des variables globales à une liste, à l'aide de SELECT
INTO. La procédure ci-après renvoie le numéro de version du serveur dans le paramètre ver.
CREATE PROCEDURE VersionProc (OUT ver VARCHAR(100))
BEGIN
SELECT @@version
INTO ver;
END;
Dans Embedded SQL, des variables globales peuvent être affectées, à l'aide de SELECT INTO, à une liste
de variables hôtes.
Liste des variables globales
Le tableau suivant répertorie les variables globales disponibles dans SQL Anywhere. Certaines variables
globales sont fournies à des fins de compatibilité avec Transact-SQL et renvoient une valeur fixe 0, 1 ou
NULL.
Nom de variable Signification
@@char_convert 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@client_csid –1 (Pour assurer la compatibilité avec Transact-SQL.)
@@client_csname NULL (Pour assurer la compatibilité avec Transact-SQL.)
@@connections Nombre des connexions établies depuis le dernier lancement du serveur.
Variables
Copyright © 2006, iAnywhere Solutions, Inc. 43
Nom de variable Signification
@@cpu_busy 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@dbts Valeur du type TIMESTAMP représentant la dernière valeur générée utilisée
pour toutes les colonnes définies avec DEFAULT TIMESTAMP.
@@error Généralement utilisée pour vérifier l'état d'erreur (succès ou échec) de la
dernière instruction exécutée. Sa valeur est 0 (zéro) si la transaction précédente
a abouti ; sinon, elle contient le numéro de la dernière erreur générée
par le système. Une instruction de type if @@error != 0 return met
fin au programme en cas d'erreur. Toute instruction remettant @@error à
zéro (y compris les commandes PRINT et les tests IF), le contrôle d'état doit
être effectué juste après l'instruction dont le résultat est incertain.
@@fetch_status Informations d'état résultant de la dernière instruction d'extraction de ligne
d'un curseur (fetch). Cette fonction est identique à @@sqlstatus, excepté
qu'elle renvoie des valeurs différentes. Elle est destinée à Microsoft SQL
Server pour des raisons de compatibilité. @@fetch_status peut prendre les
valeurs suivantes :
♦ 0 L'instruction fetch s'est terminée correctement.
♦ -1 l'instruction a généré une erreur ;
♦ -2 le jeu de résultats ne contient plus de données.
@@identity Dernière valeur insérée dans une colonne IDENTITY ou DEFAULT AUTOINCREMENT
par une instruction INSERT ou SELECT INTO. Pour plus
d'informations, reportez-vous à la section “Variable globale
@@identity”, à la page 46.
@@idle 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@io_busy 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@isolation Niveau d'isolement courant de la connexion. @@isolation renvoie la valeur
du niveau actif.
@@langid ID unique désignant le langage utilisé par la connexion en cours.
@@language Nom du langage utilisé par la connexion.
@@max_connections Pour le serveur personnel, nombre maximal de connexions simultanées qu'il
peut supporter, c'est-à-dire 10. Pour le serveur réseau, nombre maximal de
clients actifs (et non de connexions à la base de données, car chaque client
peut gérer plusieurs connexions).
@@maxcharlen Longueur maximale, en octets, d'un caractère dans le jeu de caractères
CHAR.
@@ncharsize Longueur maximale, en octets, d'un caractère dans le jeu de caractères
NCHAR.
@@nestlevel –1 (Pour assurer la compatibilité avec Transact-SQL.)
Eléments du langage SQL
44 Copyright © 2006, iAnywhere Solutions, Inc.
Nom de variable Signification
@@pack_received 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@pack_sent 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@packet_errors 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@procid ID de la procédure stockée en cours d'exécution.
@@rowcount Nombre de lignes concernées par la dernière instruction. La valeur de
@@rowcount doit être vérifiée immédiatement après l'instruction.
Les insertions, mises à jour et suppressions définissent la variable @@rowcount
qui prend alors la valeur du nombre de lignes concernées.
Avec des curseurs, @@rowcount représente le nombre cumulé de lignes
renvoyées au client à partir du jeu de résultats curseur, jusqu'à la dernière
demande d'extraction.
@@rowcount n'est pas réinitialisée à 0 (zéro) par une instruction qui ne
concerne pas les lignes, par exemple une instruction IF.
@@servername Nom du serveur de base de données courant.
@@spid Descripteur de la connexion en cours. Cette valeur est identique à celle affichée
par la procédure sa_conn_info.
@@sqlstatus Informations d'état résultant de la dernière instruction d'extraction de ligne
d'un curseur (fetch). @@sqlstatus peut prendre les valeurs suivantes :
♦ 0 L'instruction fetch s'est terminée correctement.
♦ 1 L'instruction fetch a généré une erreur.
♦ 2 Le jeu de résultats ne contient plus de données.
@@textsize Valeur courante de l'option SET TEXTSIZE, qui définit la taille maximale
(en octets) des données de type texte ou image pouvant être renvoyées avec
une instruction SELECT. Sa valeur par défaut est 32765, ce qui correspond
à la chaîne à deux octets la plus longue renvoyée par READTEXT. Cette
valeur peut être définie à l'aide de l'instruction SET.
@@thresh_hysteresis 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@timeticks 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@total_errors 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@total_read 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@total_write 0 (Pour assurer la compatibilité avec Transact-SQL.)
@@tranchained Mode de transaction courant : 0 pour le mode non chaîné ou 1 pour le mode
chaîné.
Variables
Copyright © 2006, iAnywhere Solutions, Inc. 45
Nom de variable Signification
@@trancount Niveau d'imbrication des transactions. Chaque instruction BEGIN TRANSACTION
d'un batch incrémente la valeur de cette variable.
@@transtate –1 (Pour assurer la compatibilité avec Transact-SQL.)
@@version Version courante de SQL Anywhere.
Variable globale @@identity
La variable globale @@identity contient la valeur la plus récente insérée dans une colonne IDENTITY ou
DEFAULT AUTOINCREMENT, ou zéro si la dernière insertion a eu lieu dans une table ne contenant pas
de colonne de ce type.
La valeur de @@identity dépend de la connexion. Elle est réinitialisée à chaque insertion de ligne dans une
table. Si une instruction insère plusieurs lignes, @@identity contient la valeur IDENTITY de la dernière
ligne ajoutée. Si la table concernée ne contient pas de colonne IDENTITY, la valeur 0 (zéro) est attribuée à
@@identity.
La valeur de @@identity n'est pas touchée par l'échec d'une instruction INSERT ou SELECT INTO, ni par
l'annulation d'une transaction dans laquelle elle figure. La variable conserve en effet la dernière valeur insérée
dans une colonne IDENTITY, même si la validation (COMMIT) de l'instruction l'ayant insérée échoue.
@@identity et triggers
Lorsqu'une insertion déclenche des actions d'intégrité référentielle ou un trigger, @@identity se comporte
comme une pile. Par exemple, si une insertion dans une table T1 (contenant une colonne identity ou
autoincrement) déclenche un trigger qui insère une ligne dans la table T2 (contenant aussi une colonne
identity ou autoincrement), la valeur renvoyée à l'application ou à la procédure qui a effectué l'insertion est
la valeur insérée dans T1. Dans le trigger, @@identity a la valeur de T1 avant l'insertion dans T2 et, après
l'insertion, il a la valeur de T2. Le trigger peut copier les valeurs dans des variables locales si nécessaire.
Eléments du langage SQL
46 Copyright © 2006, iAnywhere Solutions, Inc.
Commentaires
Les commentaires permettent d'attacher un texte explicatif à des instructions ou à des blocs d'instructions
SQL. Le serveur de base de données n'exécute pas les commentaires.
SQL Anywhere offre plusieurs indicateurs de commentaires :
♦ -- (Double Tiret) Le serveur de base de données ignore les caractères restant sur la ligne. Il s'agit de
l'identificateur de commentaires SQL/2003.
♦ // (Double barre oblique) La signification de la double barre oblique est identique à celle du tiret
double.
♦ /* … */ (Barre oblique-astérisque) Les caractères compris entre ces deux marqueurs de commentaire
sont ignorés. Les deux marqueurs peuvent se trouver sur des lignes distinctes. Les commentaires faisant
appel à cette convention peuvent être imbriqués. Ces commentaires sont également appelés
commentaires de style C.
♦ % (Signe pourcentage) Si la valeur On est attribuée à l'option percent_as_comment, le signe
pourcentage a la même signification que le double tiret. Toutefois, il est recommandé de ne pas utiliser
% comme indicateur de commentaire.
Exemples
♦ L'exemple suivant illustre l'utilisation de commentaires commençant par un double tiret :
CREATE FUNCTION fullname ( firstname CHAR(30),
lastname CHAR(30))
RETURNS CHAR(61)
-- fullname concatenates the firstname and lastname
-- arguments with a single space between.
BEGIN
DECLARE name CHAR(61);
SET name = firstname || ' ' || lastname;
RETURN ( name );
END
♦ L'exemple suivant illustre l'utilisation de commentaires de style C :
/*
Lists the names and employee IDs of employees
who work in the sales department.
*/
CREATE VIEW SalesEmployees AS
SELECT EmployeeID, Surname, GivenName
FROM Employees
WHERE DepartmentID = 200
Commentaires
Copyright © 2006, iAnywhere Solutions, Inc. 47
Valeur NULL
Fonction
Spécifie une valeur inconnue ou inapplicable.
Syntaxe
NULL
Utilisation
Tout contexte.
Autorisations
Vous devez être connecté à la base de données.
Effets secondaires
Aucun.
Voir aussi
♦ “Expressions”, à la page 17
♦ “Conditions de recherche”, à la page 23
Description
NULL est une valeur spéciale, différente de toute autre valeur correcte associée à n'importe quel type de
données. Elle est cependant admise dans tous les types de données. Elle sert à représenter des informations
manquantes ou inapplicables. Il s'agit là de deux cas bien distincts :
Situation Description
Manquant Le champ contient une valeur, mais celle-ci est inconnue.
Inapplicable Le champ ne s'applique pas à cette ligne particulière.
SQL permet de créer des colonnes avec la restriction NOT NULL. Les colonnes concernées ne peuvent alors
pas contenir la valeur NULL.
La valeur NULL introduit le concept de logique ternaire en SQL. La valeur NULL, comparée à l'aide d'un
opérateur de comparaison à une valeur quelconque, y compris à la valeur NULL, est "UNKNOWN". La
seule condition de recherche qui renvoie TRUE est le prédicat IS NULL. En SQL, des lignes ne sont
sélectionnées que si la condition de recherche de la clause WHERE renvoie la valeur TRUE ; les lignes
renvoyant la valeur UNKNOWN ou FALSE ne sont pas sélectionnées.
Vous pouvez également faire appel à la clause IS [ NOT ] valeur_vérité où valeur_vérité renvoie la valeur
TRUE, FALSE ou UNKNOWN, pour sélectionner des lignes impliquant la valeur NULL. Reportez-vous à
la section “Conditions de recherche”, à la page 23 pour plus d'informations.
Dans les exemples suivants, la colonne Salary contient NULL.
Eléments du langage SQL
48 Copyright © 2006, iAnywhere Solutions, Inc.
Condition Valeur de vérité Sélectionné ?
Salary = NULL UNKNOWN NO
Salary <> NULL UNKNOWN NO
NOT (Salary = NULL) UNKNOWN NO
NOT (Salary <> NULL) UNKNOWN NO
Salary = 1000 UNKNOWN NO
Salary IS NULL TRUE YES
Salary IS NOT NULL FALSE NO
Salary = expression IS UNKNOWN TRUE YES
Les mêmes règles s'appliquent lorsque vous comparez des colonnes appartenant à deux tables différentes.
Ainsi, dans le cas de la jointure de deux tables, les lignes dont une ou plusieurs des colonnes comparées
contiennent la valeur NULL ne sont pas sélectionnées.
La valeur NULL présente aussi une propriété intéressante lorsqu'elle est utilisée dans des expressions
numériques. Le résultat de toute expression numérique impliquant la valeur NULL est NULL. Ceci signifie
que si la valeur NULL est ajoutée à un nombre, le résultat est NULL, et non un nombre. Si vous voulez que
la valeur NULL soit traitée comme 0 (zéro), vous devez utiliser la fonction ISNULL(expression,0 ) (voir
“Informations de référence sur les fonctions SQL UltraLiteFonctions SQL”, à la page 97).
Nombre d'erreurs courantes dans la formulation des requêtes SQL sont dues au comportement de la valeur
NULL. Il vous faut veiller à éviter ce type de problème. La section “Conditions de
recherche”, à la page 23 décrit les effets de la logique ternaire lorsque vous combinez des conditions de
recherche.
Opérateurs ensemblistes et clause DISTINCT
Dans les opérations ensemblistes (UNION, INTERSECT, EXCEPT), ainsi que dans l'opération DISTINCT,
NULL est traité autrement que dans les conditions de recherche. Les lignes qui contiennent la valeur NULL
en étant par ailleurs identiques sont traitées comme identiques pour les besoins de ces opérations.
Par exemple, si une colonne appelée redundant contenait NULL à chaque ligne d'une table T1, l'instruction
suivante renverrait une ligne unique :
SELECT DISTINCT redundant FROM T1
Normes et compatibilité
♦ SQL/2003 Fonction principale.
♦ Sybase Dans certains contextes, Adaptive Server Enterprise traite NULL comme une valeur, à
l'inverse de SQL Anywhere. Par exemple, dans SQL Anywhere, les lignes d'une colonne c1 qui ont la
valeur NULL ne sont pas incluses dans les résultats d'une requête avec la clause WHERE suivante, car
la valeur de la condition est UNKNOWN :
Valeur NULL
Copyright © 2006, iAnywhere Solutions, Inc. 49
WHERE NOT( C1 = NULL )
Dans Adaptive Server Enterprise, la condition est évaluée à TRUE et les lignes sont renvoyées. Pour des
raisons de compatibilité, vous devez utiliser IS NULL au lieu d'un opérateur de comparaison.
Dans SQL Anywhere, des index uniques peuvent contenir des lignes contenant une valeur NULL et être
identiques. En revanche, Adaptive Server Enterprise n'admet pas ce type d'entrée dans des index uniques.
Si vous utilisez jConnect, l'option tds_empty_string_is_null détermine si les chaînes vides sont renvoyées
en tant que chaînes NULL ou comme chaînes contenant un espace.
Pour plus d'informations, reportez-vous à la section “Option tds_empty_string_is_null [base de
données]” dans le manuel SQL Anywhere Server - Administration des bases de données.
Exemple
♦ L'instruction INSERT ci-après permet d'insérer la valeur NULL dans la colonne date_retour de la table
Emprunts_livres.
INSERT
INTO Borrowed_book
( date_borrowed, date_returned, book )
VALUES ( CURRENT DATE, NULL, '1234' )
Eléments du langage SQL
50 Copyright © 2006, iAnywhere Solutions, Inc.
Chapitre 2
Types de données SQL
Table des matières
Types de données caractères ..................................................................................... 52
Types de données numériques ................................................................................... 61
Types de données monétaires .................................................................................... 70
Types de données tableau binaire .............................................................................. 71
Types de données date et heure ................................................................................. 73
Types de données binaires ......................................................................................... 81
Domaines .................................................................................................................... 85
Conversions de types de données .............................................................................. 87
Conversion de types de données Java et SQL ........................................................... 93
Présentation
Ce chapitre décrit les types de données supportés par SQL Anywhere.
Copyright © 2006, iAnywhere Solutions, Inc. 51
Types de données caractères
Fonction
Stocker des chaînes de lettres, de nombres et d'autres symboles.
Description
SQL Anywhere propose deux classes de types de données caractère, ainsi que différents domaines définis
à l'aide de ces types de données.
♦ CHAR, VARCHAR, LONG VARCHAR Données de type caractère stockées dans un jeu de caractères
codés sur un ou plusieurs octets et généralement choisies en fonction des langues principales stockées
dans la base de données.
♦ NCHAR, NVARCHAR, LONG NVARCHAR Données de type caractère stockées dans le système
de codage UTF-8 d'Unicode. Tous les points de code Unicode peuvent être stockés à l'aide de ces types
de données, quelles que soient les langues principales stockées dans la base de données.
♦ TEXT, UNIQUEIDENTIFIERSTR, XML Domaines reposant sur d'autres types de données caractère.
Stockage
Toutes les valeurs des données de type caractère sont stockées de la même manière. Par défaut, les valeurs
comportant jusqu'à 128 octets sont stockées en une seule partie. Au-delà, elles sont stockées avec un préfixe
de quatre octets qui est conservé localement sur la page de base de données, tandis que la valeur entière est
stockée dans une ou plusieurs autres pages de base de données. Ces tailles par défaut sont contrôlées par les
clauses INLINE et PREFIX de l'instruction CREATE TABLE.
Voir aussi
♦ “Instruction CREATE TABLE”, à la page 475
♦ “Option string_rtruncation [compatibilité]” dans le manuel SQL Anywhere Server - Administration des
bases de données
Type de données CHAR
Fonction
Stocker des données de type caractère dont la taille n'excède pas 32 767 octets.
Syntaxe
CHAR [ ( longueur_maximale [ CHAR | CHARACTER ] ) ]
Paramètre
longueur_maximale Longueur maximale de la chaîne. Si la sémantique de longueur en octets est utilisée
(CHAR ou CHARACTER n'est pas spécifié dans la longueur), la longueur est alors exprimée en octets et
doit être comprise entre 1 et 32 767. Si la longueur n'est pas définie, la valeur 1 est utilisée.
Types de données SQL
52 Copyright © 2006, iAnywhere Solutions, Inc.
Si la sémantique de longueur en caractères est utilisée (CHAR ou CHARACTER est spécifié dans la
longueur), la longueur est alors exprimée en caractères et vous devez définir longueur_maximale. Dans cette
sémantique, la longueur multipliée par la longueur maximale d'un caractère dans le codage de la base de
données ne doit pas dépasser 32 767 octets. Le tableau qui suit indique les longueurs maximales pour les
types de jeux de caractères supportés :
Jeu de caractères Longueur maximale de CHAR
Jeu de caractères codés sur un octet 32 767 octets
Jeu de caractères codés sur deux octets 16 383 octets
UTF-8 8191 octets
Utilisation
Les caractères codés sur plusieurs octets peuvent être stockés en tant que type de données CHAR, mais la
longueur déclarée est exprimée en octets (et non en caractères), sauf si la sémantique de longueur en
caractères est utilisée.
CHAR peut également être spécifié sous la forme CHARACTER. Quelle que soit la syntaxe utilisée, le type
de données est décrit comme CHAR.
La sémantique de CHAR est identique à celle de VARCHAR, même s'il s'agit de types de données différents.
Dans SQL Anywhere, CHAR est un type de données de longueur variable. Dans d'autres systèmes de gestion
de bases de données relationnelles, CHAR est un type de données de longueur fixe dans lequel les données
sont complétées par des blancs jusqu'à la longueur_maximale de stockage (en octets). SQL Anywhere ne
complète pas les données de type caractère par des blancs.
Selon l'interface utilisée, la sémantique de longueur en caractères peut avoir des répercussions sur les
éléments renvoyés lorsqu'une application cliente exécute une instruction DESCRIBE sur une colonne. Par
exemple, lorsqu'un client Embedded SQL exécute cette instruction sur une colonne déclarée à l'aide de la
sémantique de longueur en octets, la longueur renvoyée est la longueur en octets spécifiée. Par conséquent,
une colonne CHAR(10) est décrite comme étant de type DT_FIXCHAR avec une longueur de 10 octets.
Néanmoins, lorsqu'un client Embedded SQL exécute cette même instruction sur une colonne déclarée à l'aide
de la sémantique de longueur en caractères, la longueur renvoyée est la longueur maximale en octets dans
le jeu de caractères CHAR du client. Par exemple, dans le cas d'un client Embedded SQL utilisant UTF-8
comme jeu de caractères CHAR, une colonne CHAR(10 CHAR) est décrite comme étant de type
DT_FIXCHAR avec une longueur de 40 octets (10 caractères multipliés par le maximum de quatre octets
par caractère).
Voir aussi
♦ “Type de données VARCHAR”, à la page 58
♦ “Type de données LONG VARCHAR”, à la page 54
♦ “Type de données NCHAR”, à la page 55
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003. La sémantique de longueur en caractères est une extension
propriétaire.
Types de données caractères
Copyright © 2006, iAnywhere Solutions, Inc. 53
Type de données LONG NVARCHAR
Fonction
Stocker des données de type caractère Unicode de longueur arbitraire.
Syntaxe
LONG NVARCHAR
Utilisation
La taille maximale est de 2 Go.
Les caractères sont stockés au format UTF-8. Chaque caractère requiert entre un et quatre octets. Le nombre
maximal de caractères pouvant être stockés dans un type de données LONG NVARCHAR est supérieur à
500 millions et peut dépasser 2 milliards, selon la longueur des caractères stockés.
Lorsqu'un client Embedded SQL exécute une instruction DESCRIBE sur une colonne LONG NVARCHAR,
le type de données renvoyé est DT_LONGVARCHAR ou DT_LONGNVARCHAR, selon que la fonction
db_change_nchar_charset a été appelée. Pour plus d'informations, reportez-vous à la section “Fonction
db_change_nchar_charset” dans le manuel SQL Anywhere Server - Programmation.
Pour ODBC, une expression LONG NVARCHAR est décrite en tant que SQL_WLONGVARCHAR.
Voir aussi
♦ “Type de données NCHAR”, à la page 55
♦ “Type de données NVARCHAR”, à la page 56
♦ “Type de données LONG VARCHAR”, à la page 54
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données LONG VARCHAR
Fonction
Stocker des données de type caractère de longueur arbitraire.
Syntaxe
LONG VARCHAR
Utilisation
La taille maximale est de 2 Go.
Les caractères codés sur plusieurs octets peuvent être stockés sous forme de LONG VARCHAR, mais la
longueur est exprimée en octets et non en caractères.
Voir aussi
♦ “Type de données CHAR”, à la page 52
♦ “Type de données VARCHAR”, à la page 58
Types de données SQL
54 Copyright © 2006, iAnywhere Solutions, Inc.
♦ “Type de données LONG NVARCHAR”, à la page 54
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données NCHAR
Fonction
Stocker des données de type caractère Unicode d'une longueur maximale de 8191 caractères.
Syntaxe
NCHAR [ ( longueur_maximale ) ]
Paramètre
longueur_maximale Longueur maximale de la chaîne, en caractères. La longueur doit être comprise
entre 1 et 8191. Si elle n'est pas spécifiée, la valeur 1 est utilisée.
Utilisation
Les caractères sont stockés à l'aide du système de codage UTF-8. Le nombre maximal d'octets de stockage
requis est quatre multiplié par longueur_maximale, bien que le stockage réellement nécessaire soit
généralement inférieur.
NCHAR peut également être spécifié sous la forme NATIONAL CHAR ou NATIONAL CHARACTER.
Quelle que soit la syntaxe utilisée, le type de données est décrit comme NCHAR.
Lorsqu'un client Embedded SQL exécute une instruction DESCRIBE sur une colonne NCHAR, le type de
données renvoyé est DT_FIXCHAR ou DT_NFIXCHAR, selon que la fonction db_change_nchar_charset
a été appelée. Pour plus d'informations, reportez-vous à la section “Fonction db_change_nchar_charset”
dans le manuel SQL Anywhere Server - Programmation.
De même, lorsqu'un client Embedded SQL exécute une instruction DESCRIBE sur une colonne NCHAR,
la longueur renvoyée est la longueur maximale en octets dans le jeu de caractères NCHAR du client. Par
exemple, pour un client Embedded SQL utilisant le jeu de caractères Europe occidentale cp1252 comme jeu
de caractères NCHAR, une colonne NCHAR(10) est décrite comme étant de type DT_NFIXCHAR de
longueur 10 (10 caractères multipliés par un maximum d'un octet par caractère). Pour un client
Embedded SQL utilisant le jeu de caractères Japonais cp932, cette même colonne est décrite comme étant
de type DT_NFIXCHAR de longueur 20 (10 caractères multipliés par un maximum de deux octets par
caractère).
La sémantique de NCHAR est identique à celle de NVARCHAR, même s'il s'agit de types de données
différents. Dans SQL Anywhere, NCHAR est un type de données de longueur variable. Dans d'autres
systèmes de gestion de bases de données relationnelles, NCHAR est un type de données de longueur fixe
dans lequel les données sont complétées par des blancs jusqu'à la longueur_maximale de stockage (en
caractères). SQL Anywhere ne complète pas les données de type caractère par des blancs.
Pour ODBC, NCHAR est décrit en tant que SQL_WCHAR ou SQL_WVARCHAR, selon la valeur de
l'option odbc_distingish_char_and_varchar. Pour plus d'informations, reportez-vous à la section “Option
Types de données caractères
Copyright © 2006, iAnywhere Solutions, Inc. 55
odbc_distinguish_char_and_varchar [base de données]” dans le manuel SQL Anywhere Server -
Administration des bases de données.
Voir aussi
♦ “Type de données CHAR”, à la page 52
♦ “Type de données NVARCHAR”, à la page 56
♦ “Type de données LONG NVARCHAR”, à la page 54
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données NTEXT
Fonction
Stocker des données de type caractère Unicode de longueur arbitraire.
Syntaxe
NTEXT
Utilisation
NTEXT est un domaine, mis en oeuvre en tant que LONG NVARCHAR.
Voir aussi
♦ “Type de données LONG NVARCHAR”, à la page 54
♦ “Type de données TEXT”, à la page 57
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données NVARCHAR
Fonction
Stocker des données de type caractère Unicode d'une longueur maximale de 8191 caractères.
Syntaxe
NVARCHAR [ ( longueur_maximale ) ]
Paramètre
longueur_maximale Longueur maximale de la chaîne, en caractères. La longueur doit être comprise
entre 1 et 8191. Si elle n'est pas spécifiée, la valeur 1 est utilisée.
Types de données SQL
56 Copyright © 2006, iAnywhere Solutions, Inc.
Utilisation
Les caractères sont stockés dans le système de codage UTF-8. Le nombre maximal d'octets de stockage
requis est quatre multiplié par longueur_maximale, bien que le stockage réellement nécessaire soit
généralement inférieur.
NVARCHAR peut également être spécifié sous la forme NCHAR VARYING, NATIONAL CHAR
VARYING ou NATIONAL CHARACTER VARYING. Quelle que soit la syntaxe utilisée, le type de
données est décrit comme NVARCHAR.
Lorsqu'un client Embedded SQL exécute une instruction DESCRIBE sur une colonne NVARCHAR, le type
de données renvoyé est DT_VARCHAR ou DT_NVARCHAR, selon que la fonction
db_change_nchar_charset a été appelée. Pour plus d'informations, reportez-vous à la section “Fonction
db_change_nchar_charset” dans le manuel SQL Anywhere Server - Programmation.
De même, lorsqu'un client Embedded SQL exécute une instruction DESCRIBE sur une colonne
NVARCHAR, la longueur renvoyée est la longueur maximale en octets dans le jeu de caractères NCHAR
du client. Par exemple, pour un client Embedded SQL utilisant le jeu de caractères Europe occidentale cp1252
comme jeu de caractères NCHAR, une colonne NVARCHAR(10) est décrite comme étant de type
DT_NVARCHAR de longueur 10 (10 caractères multipliés par un maximum d'un octet par caractère). Pour
un client Embedded SQL utilisant le jeu de caractères Japonais cp932, cette même colonne est décrite comme
étant de type DT_NVARCHAR de longueur 20 (10 caractères multipliés par un maximum de deux octets
par caractère).
Pour ODBC, NVARCHAR est décrit en tant que SQL_WCHAR ou SQL_WVARCHAR, selon la valeur de
l'option odbc_distingish_char_and_varchar. Pour plus d'informations, reportez-vous à la section “Option
odbc_distinguish_char_and_varchar [base de données]” dans le manuel SQL Anywhere Server -
Administration des bases de données.
Voir aussi
♦ “Type de données NCHAR”, à la page 55
♦ “Type de données LONG NVARCHAR”, à la page 54
♦ “Type de données VARCHAR”, à la page 58
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données TEXT
Fonction
Stocker des données de type caractère de longueur arbitraire.
Syntaxe
TEXT
Utilisation
TEXT est un domaine, mis en oeuvre en tant que LONG VARCHAR.
Types de données caractères
Copyright © 2006, iAnywhere Solutions, Inc. 57
Voir aussi
♦ “Type de données LONG VARCHAR”, à la page 54
♦ “Type de données NTEXT”, à la page 56
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données UNIQUEIDENTIFIERSTR
Fonction
Domaine, mis en oeuvre en tant que CHAR( 36 ).
Syntaxe
UNIQUEIDENTIFIERSTR
Utilisation
Ce type de données est utilisé pour l'accès aux données distantes, lors du mappage de colonnes d'identificateur
unique SQL Server.
Voir aussi
♦ “Conversion des types de données : Microsoft SQL Server” dans le manuel SQL Anywhere Server -
Utilisation du SQL
♦ “STRTOUUID (fonction de chaîne de caractères)”, à la page 269
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données VARCHAR
Fonction
Stocker des données de type caractère dont la taille n'excède pas 32 767 octets.
Syntaxe
VARCHAR [ ( longueur_maximale [ CHAR | CHARACTER ] ) ]
Paramètre
longueur_maximale Longueur maximale de la chaîne. Si la sémantique de longueur en octets est utilisée
(CHAR ou CHARACTER n'est pas spécifié dans la longueur), la longueur est alors exprimée en octets et
doit être comprise entre 1 et 32 767. Si la longueur n'est pas définie, la valeur 1 est utilisée.
Si la sémantique de longueur en caractères est utilisée (CHAR ou CHARACTER est spécifié dans la
longueur), la longueur est alors exprimée en caractères et vous devez définir longueur_maximale. Dans cette
sémantique, la longueur multipliée par la longueur maximale d'un caractère dans le codage de la base de
Types de données SQL
58 Copyright © 2006, iAnywhere Solutions, Inc.
données ne doit pas dépasser 32 767 octets. Le tableau qui suit indique les longueurs maximales pour les
types de jeux de caractères supportés :
Jeu de caractères Longueur maximale de VARCHAR
Jeu de caractères codés sur un octet 32 767 octets
Jeu de caractères codés sur deux octets 16 383 octets
UTF-8 8191 octets
Utilisation
Les caractères codés sur plusieurs octets peuvent être stockés sous forme de VARCHAR, mais la longueur
déclarée est exprimée en octets et non en caractères.
VARCHAR peut également être spécifié sous la forme CHAR VARYING ou CHARACTER VARYING.
Quelle que soit la syntaxe utilisée, le type de données est décrit comme VARCHAR.
Selon l'interface utilisée, la sémantique de longueur en caractères peut avoir des répercussions sur les
éléments renvoyés lorsqu'une application cliente exécute une instruction DESCRIBE sur une colonne. Par
exemple, lorsqu'une application cliente Embedded SQL exécute cette instruction sur une colonne déclarée
à l'aide de la sémantique de longueur en octets, la longueur renvoyée est la longueur en octets spécifiée. Par
conséquent, une colonne VARCHAR(10) est décrite comme étant de type DT_VARCHAR avec une
longueur de 10 octets. Néanmoins, lorsqu'une application cliente Embedded SQL exécute cette même
instruction sur une colonne déclarée à l'aide de la sémantique de longueur en caractères, la longueur renvoyée
est la longueur maximale en octets dans le jeu de caractères CHAR du client. Par exemple, dans le cas d'un
client utilisant UTF-8 comme jeu de caractères CHAR, une colonne VARCHAR(10 CHAR) est décrite
comme étant de type DT_VARCHAR avec une longueur de 40 octets (10 caractères multipliés par quatre
octets par caractère au maximum).
Voir aussi
♦ “Type de données CHAR”, à la page 52
♦ “Type de données LONG VARCHAR”, à la page 54
♦ “Type de données NVARCHAR”, à la page 56
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003. La sémantique de longueur en caractères est une extension
propriétaire.
Type de données XML
Fonction
Stocker des documents XML.
Syntaxe
XML
Types de données caractères
Copyright © 2006, iAnywhere Solutions, Inc. 59
Utilisation
XML est un domaine, mis en oeuvre en tant que LONG VARCHAR.
Les données de type XML ne sont pas mises entre guillemets lors de la génération du contenu d'un élément
à partir de données relationnelles.
Vous pouvez effectuer des conversions entre le type de données XML et tout autre type de données
convertible vers ou depuis une chaîne. Notez qu'aucun contrôle n'est effectué pour vérifier que la chaîne est
correctement formée avant sa conversion en XML.
F Pour plus d'informations sur l'utilisation du type de données XML lors de la génération d'éléments XML,
reportez-vous à la section “Stockage de documents XML dans des bases de données relationnelles” dans le
manuel SQL Anywhere Server - Utilisation du SQL.
Voir aussi
♦ “Type de données LONG VARCHAR”, à la page 54
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003.
Types de données SQL
60 Copyright © 2006, iAnywhere Solutions, Inc.
Types de données numériques
Fonction
Stocker des données numériques.
Remarques
♦ Les types de données NUMERIC et DECIMAL et les différents types d'entier (INTEGER) sont parfois
appelés types de données numériques exacts par opposition aux types arrondis tels que FLOAT,
DOUBLE et REAL.
Les types exacts permettent de spécifier des valeurs de précision et d'échelle, tandis le mode de stockage
des types approchés est prédéfini. Après une opération numérique, la précision jusqu'au chiffre le moins
significatif n'est garantie que pour des données numériques exactes.
♦ La longueur et la précision d'un type de données doivent être supérieures à 1.
Compatibilité
♦ Seuls les types de données numériques dont le nombre de chiffres après la virgule est égal à 0 (échelle
= 0) peuvent figurer dans la colonne identity de Transact-SQL.
♦ Soyez vigilant si vous utilisez les paramètres de précision et d'échelle par défaut pour les types de données
NUMERIC et DECIMAL, car ces paramètres peuvent être différents dans d'autres solutions de base de
données. Dans SQL Anywhere, la précision par défaut est 30 et l'échelle par défaut, 6.
Vous devez éviter les paramètres de précision et d'échelle par défaut pour les types de données
NUMERIC et DECIMAL car ils sont différents entre SQL Anywhere et Adaptive Server Enterprise.
Dans SQL Anywhere, la précision par défaut est 30 et l'échelle par défaut, 6. En revanche, dans Adaptive
Server Enterprise, ces valeurs sont respectivement 18 et 0.
♦ Le type de données FLOAT (p) est synonyme de REAL ou de DOUBLE selon la précision définie. Dans
SQL Anywhere, la valeur seuil dépend de la plate-forme utilisée, mais elle est toujours supérieure à 15.
F Pour plus d'informations sur la modification des valeurs par défaut par le biais d'options de base de
données, reportez-vous aux sections “Option precision [base de données]” dans le manuel SQL Anywhere
Server - Administration des bases de données et “Option scale [base de données]” dans le manuel SQL
Anywhere Server - Administration des bases de données.
Type de données BIGINT
Fonction
Entier stocké sur 8 octets.
Syntaxe
[ UNSIGNED ] BIGINT
Types de données numériques
Copyright © 2006, iAnywhere Solutions, Inc. 61
Utilisation
BIGINT est un type de données numérique exact : il conserve sa précision une fois les opérations
arithmétiques effectuées.
Une valeur BIGINT est stockée sur 8 octets.
Les valeurs BIGINT signées peuvent être comprises entre –263 et 263 – 1 ou entre –9223372036854775808
et 9223372036854775807.
Quant aux valeurs BIGINT non signées, elles peuvent être comprises entre 0 et 264 – 1 ou entre 0
et 18446744073709551615.
Par défaut, le type de données est signé.
Voir aussi
♦ “Type de données BIT”, à la page 62
♦ “Type de données INTEGER”, à la page 66
♦ “Type de données SMALLINT”, à la page 68
♦ “Type de données TINYINT”, à la page 69
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données BIT
Fonction
Stocker 0 ou 1 (un bit).
Syntaxe
BIT
Utilisation
BIT est un type entier permettant de stocker la valeur 0 ou 1.
Par défaut, le type de données BIT n'admet pas les valeurs NULL.
Voir aussi
♦ “Type de données BIGINT”, à la page 61
♦ “Type de données INTEGER”, à la page 66
♦ “Type de données SMALLINT”, à la page 68
♦ “Type de données TINYINT”, à la page 69
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Types de données SQL
62 Copyright © 2006, iAnywhere Solutions, Inc.
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données DECIMAL
Fonction
Nombre décimal comportant un nombre total de chiffres égal à précision et un nombre de chiffres après le
signe décimal égal à échelle.
Syntaxe
DECIMAL [ ( précision [ , échelle ] ) ]
Paramètres
précision Expression d'entier comprise entre 1 et 127 inclus, indiquant le nombre de chiffres contenus
dans l'expression. La valeur par défaut est 30.
échelle Expression d'entier comprise entre 1 et 127 inclus, indiquant le nombre de chiffres après le signe
décimal. La valeur d'échelle doit toujours être inférieure ou égale à la valeur de précision. La valeur par
défaut est 6.
Vous pouvez modifier les valeurs par défaut via des options de base de données. Pour plus d'informations,
reportez-vous aux sections “Option precision [base de données]” dans le manuel SQL Anywhere Server -
Administration des bases de données et “Option scale [base de données]” dans le manuel SQL Anywhere
Server - Administration des bases de données.
Utilisation
decimal est un type de données numérique exact : une fois les opérations arithmétiques effectuées, il conserve
sa précision jusqu'au chiffre le moins significatif.
L'espace nécessaire pour stocker un nombre décimal peut se calculer comme suit :
2 + int( (before + 1)/2 ) + int( (after + 1)/2 )
où la fonction int ne garde que la partie entière de son argument ; avant et après représentent le nombre de
chiffres significatifs avant et après le signe décimal. Le stockage repose sur la valeur en cours de stockage
et non sur les précision et échelle maximales autorisées dans la colonne.
DECIMAL peut également être spécifié sous la forme DEC. Quelle que soit la syntaxe utilisée, le type de
données est décrit comme DECIMAL.
La sémantique de DECIMAL est identique à celle de NUMERIC.
Voir aussi
♦ “Type de données FLOAT”, à la page 64
♦ “Type de données REAL”, à la page 67
♦ “Type de données DOUBLE”, à la page 64
♦ “Type de données NUMERIC”, à la page 66
♦ “Fonctions numériques”, à la page 103
Types de données numériques
Copyright © 2006, iAnywhere Solutions, Inc. 63
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003.
Type de données DOUBLE
Fonction
Nombre à virgule flottante en double précision.
Syntaxe
DOUBLE [ PRECISION ]
Utilisation
Le type de données DOUBLE conserve un nombre à virgule flottante en double précision. Du fait qu'il s'agit
d'un type approché, il est possible de constater des erreurs d'arrondi après des opérations arithmétiques. La
nature approximative des valeurs DOUBLE signifie qu'il faut généralement éviter les requêtes utilisant des
égalités lors de la comparaison de valeurs DOUBLE.
Les valeurs DOUBLE requièrent un stockage sur 8 octets.
Les valeurs autorisées sont comprises entre 2.22507385850721e–308 et 1.79769313486231e+308. La
précision des valeurs de type DOUBLE est conservée jusqu'à 15 chiffres significatifs ; au-delà, ces nombres
peuvent présenter une erreur d'arrondi.
Voir aussi
♦ “Type de données FLOAT”, à la page 64
♦ “Type de données REAL”, à la page 67
♦ “Type de données DECIMAL”, à la page 63
♦ “Type de données NUMERIC”, à la page 66
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
♦ “Conversion entre jeux numériques”, à la page 92
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003.
Type de données FLOAT
Fonction
Nombre à virgule flottante en simple ou double précision.
Syntaxe
FLOAT [ ( précision ) ]
Types de données SQL
64 Copyright © 2006, iAnywhere Solutions, Inc.
Utilisation
Lorsqu'une colonne est créée avec le type de données FLOAT (précision), vous avez l'assurance qu'elle
contiendra, sur toutes les plates-formes, des valeurs ayant au moins la précision minimale spécifiée. Ce n'est
pas le cas de REAL et de DOUBLE, qui ne garantissent pas une précision minimale d'une plate-forme à une
autre.
Si précision n'est pas fournie, le type de données FLOAT est un nombre à virgule flottante en simple précision,
qui équivaut au type de données REAL et requiert un stockage sur 4 octets.
Si précision est fournie, le type de données FLOAT peut être en simple ou en double précision, selon la
valeur de la précision indiquée. La différence entre REAL et DOUBLE dépend de la plate-forme. Les valeurs
FLOAT en simple précision requièrent un stockage sur 4 octets et les valeurs FLOAT en double précision
requièrent un stockage sur 8 octets.
Le type de données FLOAT est un type de données numériques approché. Il est possible de constater des
erreurs d'arrondi après des opérations arithmétiques. La nature approximative des valeurs FLOAT signifie
qu'il faut généralement éviter les requêtes utilisant des égalités lors de la comparaison de valeurs FLOAT.
Vous pouvez optimiser le fonctionnement du type de données FLOAT pour la prise en charge par Adaptive
Server Enterprise, en utilisant l'“Option float_as_double [compatibilité]” dans le manuel SQL Anywhere
Server - Administration des bases de données.
Paramètre
précision Expression d'entier indiquant le nombre de bits contenus dans la mantisse. La mantisse est la
partie décimale d'un logarithme. Par exemple, dans le logarithme 5,63428, la mantisse est 0,63428. La
précision à virgule flottante conforme à la norme IEEE 754 est la suivante :
Valeur de précision
fournie
Précision décimale Type de données SQL équivalent
Taille de stockage
1-24 7 décimales REAL 4 octets
25-53 15 décimales DOUBLE 8 octets
Voir aussi
♦ “Type de données DOUBLE”, à la page 64
♦ “Type de données REAL”, à la page 67
♦ “Type de données DECIMAL”, à la page 63
♦ “Type de données NUMERIC”, à la page 66
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003.
Types de données numériques
Copyright © 2006, iAnywhere Solutions, Inc. 65
Type de données INTEGER
Fonction
Entier stocké sur 4 octets.
Syntaxe
[ UNSIGNED ] INTEGER
Utilisation
integer est un type de données numérique exact : sa précision est conservée une fois les opérations
arithmétiques effectuées.
Si vous spécifiez UNSIGNED; vous ne pouvez jamais attribuer de valeur négative à l'entier. Par défaut, le
type de données est signé.
Les entiers signés peuvent être compris entre –231 et 231 – 1, ou entre –2147483648 et 2147483647.
Quant aux entiers non signés, ils peuvent être compris entre 0 et 232 – 1 ou entre 0 et 4294967295.
INTEGER peut également être spécifié sous la forme INT. Quelle que soit la syntaxe utilisée, le type de
données est décrit comme INTEGER.
Voir aussi
♦ “Type de données BIGINT”, à la page 61
♦ “Type de données BIT”, à la page 62
♦ “Type de données SMALLINT”, à la page 68
♦ “Type de données TINYINT”, à la page 69
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003. Le mot-clé UNSIGNED est une extension propriétaire.
Type de données NUMERIC
Fonction
Nombre décimal comportant un nombre total de chiffres égal à précision et un nombre de chiffres après le
signe décimal égal à échelle.
Syntaxe
NUMERIC [ ( précision [ , échelle ] ) ]
Paramètres
précision Expression d'entier comprise entre 1 et 127 inclus, indiquant le nombre de chiffres contenus
dans l'expression. La valeur par défaut est 30.
Types de données SQL
66 Copyright © 2006, iAnywhere Solutions, Inc.
échelle Expression d'entier comprise entre 1 et 127 inclus, indiquant le nombre de chiffres après le signe
décimal. La valeur d'échelle doit toujours être inférieure ou égale à la valeur de précision. La valeur par
défaut est 6.
Vous pouvez modifier les valeurs par défaut via des options de base de données. Pour plus d'informations,
reportez-vous aux sections “Option precision [base de données]” dans le manuel SQL Anywhere Server -
Administration des bases de données et “Option scale [base de données]” dans le manuel SQL Anywhere
Server - Administration des bases de données.
Utilisation
Le type de données NUMERIC est un type de données numérique exact qui conserve sa précision jusqu'au
chiffre le moins significatif, une fois les opérations arithmétiques effectuées.
L'espace nécessaire pour stocker un nombre décimal peut se calculer comme suit :
2 + int( (before+1)/2 ) + int( (after+1)/2 )
où la fonction int ne garde que la partie entière de son argument ; before et after représentent le nombre de
chiffres significatifs avant et après la virgule. Le stockage repose sur la valeur en cours de stockage et non
sur les précision et échelle maximales autorisées dans la colonne.
La sémantique de NUMERIC est identique à celle de DECIMAL.
Voir aussi
♦ “Type de données FLOAT”, à la page 64
♦ “Type de données REAL”, à la page 67
♦ “Type de données DOUBLE”, à la page 64
♦ “Type de données DECIMAL”, à la page 63
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
♦ “Conversion entre jeux numériques”, à la page 92
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003, si la valeur de l'option scale est 0 (zéro).
Type de données REAL
Fonction
Nombre à virgule flottante en simple précision stocké sur 4 octets.
Syntaxe
REAL
Utilisation
REAL est un type de données numérique approché. Il est donc possible de constater des erreurs d'arrondi
après des opérations arithmétiques.
Types de données numériques
Copyright © 2006, iAnywhere Solutions, Inc. 67
Les valeurs autorisées sont comprises entre -3,402823e+38 et 3,402823e+38, les nombres proches de zéro
pouvant aller jusqu'à 1,175495e-38. Les valeurs stockées en tant que REAL offrent une précision à 10 chiffres
significatifs mais peuvent présenter une erreur d'arrondi au-delà du sixième chiffre.
La nature approximative des valeurs REAL implique qu'il faut généralement éviter les requêtes utilisant des
égalités lors de la comparaison de valeurs REAL.
Voir aussi
♦ “Type de données DOUBLE”, à la page 64
♦ “Type de données FLOAT”, à la page 64
♦ “Type de données DECIMAL”, à la page 63
♦ “Type de données NUMERIC”, à la page 66
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003.
Type de données SMALLINT
Fonction
Entier stocké sur 2 octets.
Syntaxe
[ UNSIGNED ] SMALLINT
Utilisation
smallint est un type de données numérique exact : sa précision est conservée après calcul. Il requiert un
stockage sur 2 octets.
Les valeurs SMALLINT signées peuvent être comprises entre –215 et 215 – 1 entre –32768 et 32767.
Quant aux valeurs SMALLINT non signées, elles peuvent être comprises entre 0 et 216 – 1 ou entre 0
et 65535.
Voir aussi
♦ “Type de données BIGINT”, à la page 61
♦ “Type de données BIT”, à la page 62
♦ “Type de données INTEGER”, à la page 66
♦ “Type de données TINYINT”, à la page 69
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Pris en charge par SQL/2003. Le mot-clé UNSIGNED est une extension propriétaire.
Types de données SQL
68 Copyright © 2006, iAnywhere Solutions, Inc.
Type de données TINYINT
Fonction
Entier non signé, stocké sur 1 octet.
Syntaxe
[ UNSIGNED ] TINYINT
Utilisation
tinyint est un type de données numérique exact : sa précision est conservée après calcul.
Vous pouvez attribuer à des entiers TINYINT la propriété unsigned, toutefois elle reste inopérante car ce
type est par nature non signé.
Les valeurs TINYINT peuvent être comprises entre 0 et 28 – 1 ou entre 0 et 255.
La valeur de colonnes TINYINT ne doit pas être affectée à des variables Embedded SQL définies comme
char ou unsigned char. En effet, le système tente de convertir la valeur de la colonne en une chaîne, puis
d'attribuer le premier octet à la variable du programme. Les colonnes TINYINT doivent être affectées à des
colonnes d'entiers stockés sur 2 ou 4 octets lors de leur lecture. D'autre part, pour qu'une valeur TINYINT
puisse être adressée à une base de données depuis une application écrite en langage C, il est nécessaire que
la variable C soit un entier.
Voir aussi
♦ “Type de données BIGINT”, à la page 61
♦ “Type de données BIT”, à la page 62
♦ “Type de données INTEGER”, à la page 66
♦ “Type de données SMALLINT”, à la page 68
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Types de données numériques
Copyright © 2006, iAnywhere Solutions, Inc. 69
Types de données monétaires
Fonction
Stocker des données monétaires.
Type de données MONEY
Fonction
Stocker des données monétaires.
Syntaxe
MONEY
Utilisation
MONEY est mis en oeuvre en tant que domaine, comme NUMERIC(19,4).
Voir aussi
♦ “Type de données SMALLMONEY”, à la page 70
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données SMALLMONEY
Fonction
Stocker des données monétaires inférieures à un million d'unités monétaires.
Syntaxe
SMALLMONEY
Utilisation
SMALLMONEY est mis en oeuvre en tant que domaine, comme NUMERIC(10,4).
Voir aussi
♦ “Type de données MONEY”, à la page 70
♦ “Fonctions numériques”, à la page 103
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Types de données SQL
70 Copyright © 2006, iAnywhere Solutions, Inc.
Types de données tableau binaire
Fonction
Stocker des données bit (0 et 1).
Description
Un type de données tableau binaire permet de stocker un tableau binaire. Les types de données tableau
binaire supportés par SQL Anywhere sont VARBIT et LONG VARBIT.
Type de données LONG VARBIT
Fonction
Stocker des tableaux binaires de longueur arbitraire.
Syntaxe
LONG VARBIT
Utilisation
Le type de données LONG VARBIT est utilisé pour stocker un tableau binaire (1 et 0) de longueur arbitraire
ou des tableaux binaires supérieurs à 32 767 bits.
LONG VARBIT peut également être spécifié sous la forme LONG BIT VARYING. Quelle que soit la
syntaxe utilisée, le type de données est décrit comme LONG VARBIT.
Voir aussi
♦ “Type de données VARBIT”, à la page 71
♦ “Conversion de tableaux binaires”, à la page 91
♦ “Fonctions de tableau binaire”, à la page 99
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données VARBIT
Fonction
Stocker des tableaux binaires de longueur inférieure à 32 767 bits.
Syntaxe
VARBIT [ (longueur_maximale ) ]
Types de données tableau binaire
Copyright © 2006, iAnywhere Solutions, Inc. 71
Paramètre
longueur_maximale Longueur maximale du tableau binaire, en bits. La longueur doit être comprise
entre 1 et 32 767. Si elle n'est pas spécifiée, la valeur 1 est utilisée.
Utilisation
VARBIT peut également être spécifié sous la forme BIT VARYING. Quelle que soit la syntaxe utilisée, le
type de données est décrit comme VARBIT.
Voir aussi
♦ “Type de données LONG VARBIT”, à la page 71
♦ “Conversion de tableaux binaires”, à la page 91
♦ “Fonctions de tableau binaire”, à la page 99
♦ “Fonctions d'agrégat (UltraLite)”, à la page 98
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Types de données SQL
72 Copyright © 2006, iAnywhere Solutions, Inc.
Types de données date et heure
Fonction
Stocker les dates et les heures.
Description
Cette section décrit le mode de traitement interne des dates par SQL Anywhere, ainsi que celui des
informations de date ambiguës (telles que la conversion d'une année à deux chiffres).
La liste qui suit donne un bref aperçu du mode de traitement des dates :
♦ SQL Anywhere renvoie toujours des valeurs exactes pour les opérations arithmétiques ou logiques
autorisées sur les dates, même si les valeurs calculées s'étendent sur plusieurs siècles.
♦ En interne, les dates SQL Anywhere sont toujours stockées avec la partie de l'année correspondant au
siècle.
♦ Aucune valeur de retour, y compris la date courante, ne modifie le fonctionnement de SQL Anywhere.
♦ Les dates peuvent toujours être émises dans un format incluant le siècle.
Mode de stockage des dates
Les dates contenant des années sont utilisées en interne et stockées dans les bases de données SQL Anywhere
dans l'un des types de données suivants :
Type de données Contenu Taille des variables Intervalle de valeurs
DATE Date calendaire (année,
mois, jour)
octets 0001-01-01 à
9999-12-31
TIMESTAMP Estampille (année, mois,
jour, heures, minutes,
secondes et fractions de
seconde ; les fractions
sont exactes jusqu'à la
6e décimale)
octets 0001-01-01 à
9999-12-31 (la précision
de la partie horaire
de TIMESTAMP est
supprimée avant
1600-02-28 23:59:59 et
après 7911-01-01
00:00:00)
F Pour plus d'informations sur les types de données date et heure de SQL Anywhere, reportez-vous à la
section “Types de données date et heure”, à la page 73.
Envoi de dates et d'heures à la base de données
Vous pouvez envoyer des dates et des heures à la base de données comme suit :
♦ au moyen d'une interface, en tant que chaînes ;
Types de données date et heure
Copyright © 2006, iAnywhere Solutions, Inc. 73
♦ à l'aide d'ODBC, en tant que structures TIMESTAMP ;
♦ à l'aide d'Embedded SQL, en tant que structures SQLDATETIME.
Lorsque vous envoyez un horaire à la base de données, sous la forme d'une chaîne (pour le type TIME) ou
d'une partie de chaîne (pour les types TIMESTAMP et DATE), les heures, les minutes et les secondes doivent
être séparées par le signe deux-points (:). Elles doivent respecter le format hh:mm:ss.sss, mais peuvent
apparaître n'importe où dans la chaîne. Exemples de chaînes horaires correctes et non ambiguës :
21:35 -- 24 hour clock if no am or pm specified
10:00pm -- pm specified, so interpreted as 12 hour clock
10:00 -- 10:00am in the absence of pm
10:23:32.234 -- seconds and fractions of a second included
Lorsque vous envoyez une date à la base de données sous la forme d'une chaîne, elle est automatiquement
convertie en type DATE ou TIMESTAMP. La chaîne peut être transmise comme suit :
♦ sous la forme d'une chaîne aaaa/mm/jj ou aaaa-mm-jj, interprétée sans équivoque par la base de données ;
♦ sous la forme d'une chaîne interprétée en fonction de l'option de base de données date_order. Pour plus
d'informations, reportez-vous à la section “Option date_order [compatibilité]” dans le manuel SQL
Anywhere Server - Administration des bases de données.
Conversions Transact-SQL du type chaîne en type date/heure
Conversion de chaînes en types de données date et heure.
Si une chaîne contenant uniquement une valeur horaire (sans date) est convertie en type de données date/
heure, SQL Anywhere utilise la date courante.
Si la partie fraction d'une heure est inférieure à 3 chiffres, SQL Anywhere interprète la valeur de la même
manière qu'elle soit précédée d'un point (.) ou de deux points (:) : un chiffre signifie dizaines, deux chiffres,
centaines et trois chiffres, milliers.
Exemple
SQL Anywhere convertit toujours la valeur des millisecondes de la même manière, quel que soit le
séparateur.
12:34:56.7 to 12:34:56.700
12:34:56:7 to 12:34:56.700
12.34.56.78 to 12:34:56.780
12.34.56:78 to 12:34:56.780
12:34:56.789 to 12:34:56.789
12:34:56:789 to 12:34:56.789
Récupération de dates et d'heures de la base de données
Il existe plusieurs méthodes de récupération des dates et heures de la base de données :
♦ au moyen d'une interface, en tant que chaînes ;
Types de données SQL
74 Copyright © 2006, iAnywhere Solutions, Inc.
♦ à l'aide d'ODBC, en tant que structures TIMESTAMP ;
♦ à l'aide d'Embedded SQL, en tant que structures SQLDATETIME.
Lorsque vous récupérez une date ou une heure sous forme de chaîne, son format est déterminé par les options
de base de données date_format, time_format et timestamp_format. Pour plus d'informations sur ces options,
reportez-vous à la section “Instruction SET OPTION”, à la page 695.
F Pour plus d'informations sur les fonctions en rapport avec la date et l'heure, reportez-vous à la section
“Fonctions de date et d'heure (UltraLite)”, à la page 100. Les opérateurs arithmétiques autorisés avec des
dates sont les suivants :
♦ timestamp + integer Ajoute le nombre de jours spécifié à une date ou à une estampille.
♦ timestamp - integer Soustrait le nombre de jours spécifié d'une date ou d'une estampille.
♦ date - date - date Calcule le nombre de jours entre deux dates ou estampilles.
♦ date + time Crée une estampille combinant la date et l'heure spécifiées.
Années bissextiles
Pour identifier les années bissextiles, SQL Anywhere utilise un algorithme classique qui considère comme
bissextile toute année divisible par quatre. Dans le cas particulier d'une date marquant un siècle (par exemple,
1900), l'année est bissextile si elle est divisible par 400.
SQL Anywhere gère correctement toutes les années bissextiles. Par exemple, l'instruction SQL suivante
renvoie une valeur égale à "Mardi" :
SELECT DAYNAME('2000-02-29')
SQL Anywhere accepte le 29 février 2000 (une année bissextile) comme une date et s'en sert pour déterminer
le jour de la semaine correspondant.
En revanche, SQL Anywhere rejette l'instruction suivante :
SELECT DAYNAME('2001-02-29')
Cette instruction provoque une erreur (Impossible de convertir '2001-02-29' en date), puisqu'il n'existe pas
de 29 février en 2001.
Comparaison de dates et d'heures dans la base de données
Par défaut, les valeurs stockées en tant que DATE ne mentionnent pas d'heure ni de minutes, de sorte que
la comparaison des dates s'effectue directement.
Le type de données DATE peut également contenir une heure, ce qui complique la comparaison de dates.
Si l'heure est omise lors de la saisie d'une date dans la base de données, la valeur par défaut est 0:00 ou
12:00am (minuit). Lorsque cette option est activée, les comparaisons portent sur les dates ainsi que sur les
heures. La valeur de date de base de données 1999-05-23 10:00 n'est pas égale à la constante 1999-05-23.
Plusieurs fonctions de date, dont DATEFORMAT, permettent de comparer des parties des champs date et
heure. Exemple :
Types de données date et heure
Copyright © 2006, iAnywhere Solutions, Inc. 75
DATEFORMAT(invoice_date,'yyyy/mm/dd') = '1999/05/23'
Si une colonne de la base de données requiert uniquement une date, les applications clientes doivent vérifier
qu'aucune heure n'est spécifiée lors de la saisie d'une date dans la base de données. Ainsi, les comparaisons
avec les chaînes contenant uniquement des dates donneront les résultats prévus.
Si vous souhaitez comparer une date à une chaîne en tant que chaîne, vous devez utiliser la fonction
DATEFORMAT ou CAST pour convertir la date en chaîne avant la comparaison.
Utilisation de dates et d'heures non ambiguës
Les dates écrites au format aaaa/mm/jj ou aaaa-mm-jj sont toujours reconnues sans équivoque comme des
dates, quelle que soit la valeur de l'option date_order. D'autres caractères sont utilisables comme séparateurs,
à la place de "/" ou "-" ; par exemple "?", un espace ou ",". Utilisez ce format si plusieurs utilisateurs sont
susceptibles d'employer des paramétrages de date_order différents. Dans les procédures stockées, par
exemple, l'emploi d'un format de date non ambigu permet d'éviter toute interprétation erronée des données
par rapport à la valeur de l'option date_order de l'utilisateur.
De la même manière, une chaîne au format hh:mm:ss.sss est interprétée sans ambiguïté comme une heure.
Toute combinaison d'une date et d'une heure non ambiguës génère une valeur date-heure sans équivoque.
Ainsi, le format aaaa-mm-jj hh.mm.ss.sss
identifie une valeur date-heure sans équivoque. L'heure peut comporter des points (.) uniquement si elle est
combinée avec une date.
Il est possible, dans d'autres contextes, d'utiliser un format de date plus souple. SQL Anywhere peut
interpréter un large éventail de chaînes en tant que dates. Cette interprétation dépend du paramétrage de
l'option de base de données date_order. La valeur de date_order peut être MDY, YMD ou DMY (voir
“Instruction SET OPTION”, à la page 695). Par exemple, l'instruction suivante valide la valeur DMY :
SET OPTION date_order = 'DMY' ;
La valeur par défaut de date_order est YMD. Le pilote ODBC valide cette valeur lors de l'établissement
d'une connexion. Vous pouvez toujours modifier ce paramétrage à l'aide de l'instruction SET TEMPORARY
OPTION.
L'option date_order détermine la façon dont la base de données interprète la chaîne 10/11/12 :
12 novembre 2010, 11 octobre 2012 ou 10 novembre 2012. L'année, le mois et le jour d'une chaîne de date
doivent être séparés par des caractères spécifiques (par exemple, la barre oblique, le tiret ou l'espace) et
apparaître dans l'ordre défini par l'option date_order.
L'année peut être indiquée en 2 ou 4 chiffres. La valeur de l'option nearest_century a une incidence sur
l'interprétation des années en 2 chiffres : 2000 est ajouté aux valeurs inférieures à celle de nearest_century
et 1900, aux autres valeurs. La valeur par défaut de cette option est 50. Ainsi, par défaut, l'année 50 est
interprétée comme 1950 et l'année 49, comme 2049.
Le mois est spécifié par son nom ou par son numéro. Le signe deux-points (:) sépare les heures et les minutes,
mais la valeur des heures et des minutes peut figurer n'importe où dans la chaîne.
Types de données SQL
76 Copyright © 2006, iAnywhere Solutions, Inc.
Remarques
♦ Il est conseillé de toujours spécifier l'année dans un format à quatre chiffres.
♦ Avec un paramétrage approprié de date_order, les chaînes suivantes représentent toutes des dates
correctes :
99-05-23 21:35
99/5/23
1999/05/23
May 23 1999
23-May-1999
Tuesday May 23, 1999 10:00pm
♦ Si une chaîne contient uniquement une date partielle, des valeurs par défaut sont utilisées pour remplir
les parties manquantes. Les valeurs par défaut utilisées sont les suivantes :
♦ année Année en cours.
♦ mois Aucune valeur par défaut.
♦ jour 1 (utile pour les champs mois; par exemple, 'Mai 1999' donne la date '1999-05-01 00:00').
♦ heures, minutes, secondes, fractions de seconde 0
Type de données DATE
Fonction
Date calendaire, telle qu'année, mois et jour.
Syntaxe
DATE
Utilisation
L'année peut être comprise entre 0001 et 9999. Dans SQL Anywhere, la date minimale est 0001-01-01
00:00:00.
Pour des raisons historiques, une colonne DATE peut également contenir une heure et des minutes. Il est
recommandé d'utiliser le type TIMESTAMP pour toute valeur contenant des heures et des minutes.
Le format dans lequel les valeurs de DATE sont récupérées est déterminé par l'option date_format. Ainsi,
la date 19 juillet 2003 peut être renvoyée à une application sous la forme 2003/07/19,
Jul 19, 2003, ou une des nombreuses autres formes possibles.
Le mode d'interprétation d'une date par le serveur de base de données est déterminé par l'option date_order.
Ainsi, selon la valeur de date_order, la date 02/05/2002 fournie par une application pour une valeur
DATE peut être interprétée dans la base comme le 2 mai ou le 5 février.
Les valeurs DATE sont stockées sur 4 octets.
Types de données date et heure
Copyright © 2006, iAnywhere Solutions, Inc. 77
Voir aussi
♦ “Option date_format [compatibilité]” dans le manuel SQL Anywhere Server - Administration des bases
de données
♦ “Option date_order [compatibilité]” dans le manuel SQL Anywhere Server - Administration des bases
de données
♦ “Type de données DATETIME”, à la page 78
♦ “Type de données SMALLDATETIME”, à la page 78
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Fonctions de date et d'heure (UltraLite)”, à la page 100
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données DATETIME
Fonction
Domaine, mis en oeuvre en tant que type TIMESTAMP.
Syntaxe
DATETIME
Voir aussi
♦ “Type de données DATE”, à la page 77
♦ “Type de données SMALLDATETIME”, à la page 78
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Fonctions de date et d'heure (UltraLite)”, à la page 100
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données SMALLDATETIME
Fonction
Domaine, mis en oeuvre en tant que type TIMESTAMP.
Syntaxe
SMALLDATETIME
Voir aussi
♦ “Type de données DATE”, à la page 77
♦ “Type de données DATETIME”, à la page 78
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Fonctions de date et d'heure (UltraLite)”, à la page 100
Types de données SQL
78 Copyright © 2006, iAnywhere Solutions, Inc.
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
TIME, type de données
Fonction
Heure de la journée contenant l'heure, les minutes, les secondes et les fractions de seconde.
Syntaxe
TIME
Utilisation
La précision des fractions est de 6 décimales. Une valeur TIME est stockée sur 8 octets. (Les normes ODBC
limitent la précision du type de données TIME à la seconde près. Il est donc déconseillé d'utiliser des valeurs
TIME dans une clause WHERE qui effectue des comparaisons basées sur une précision supérieure à la
seconde.)
Voir aussi
♦ “Type de données TIMESTAMP”, à la page 79
♦ “Fonctions de date et d'heure (UltraLite)”, à la page 100
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données TIMESTAMP
Fonction
Type de données contenant l'année, le mois, le jour, l'heure, les minutes, les secondes et les fractions de
seconde.
Syntaxe
TIMESTAMP
Utilisation
La précision des fractions est de 6 décimales. Une valeur TIMESTAMP est stockée sur 8 octets.
Bien que la plage de dates couverte par TIMESTAMP soit identique à celle du type DATE (couvrant les
années 0001 à 9999), l'intervalle utile des valeurs TIMESTAMP est compris entre 1600-02-28 23:59:59 et
7911-01-01 00:00:00. En dehors de cet intervalle, la partie horaire de TIMESTAMP peut être incomplète.
Voir aussi
♦ “TIME, type de données”, à la page 79
♦ “Fonctions de date et d'heure (UltraLite)”, à la page 100
Types de données date et heure
Copyright © 2006, iAnywhere Solutions, Inc. 79
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Types de données SQL
80 Copyright © 2006, iAnywhere Solutions, Inc.
Types de données binaires
Fonction
Stocker des données binaires, y compris des images et d'autres types d' informations non interprétés par la
base de données.
Type de données BINARY
Fonction
Stocker des données binaires d'une longueur maximale spécifiée (en octets).
Syntaxe
BINARY [ ( longueur_maximale ) ]
Paramètre
longueur_maximale Longueur maximale de la valeur, en octets. La longueur doit être comprise entre 1
et 32 767. Si elle n'est pas spécifiée, la valeur 1 est utilisée.
Utilisation
Les valeurs BINARY font l'objet de comparaisons exactes octet par octet, alors que les valeurs CHAR sont
comparées selon la séquence de classement de la base de données. Si une chaîne binaire est un préfixe d'une
autre, la chaîne la plus courte est considérée comme inférieure à la chaîne la plus longue.
Contrairement aux valeurs CHAR, les valeurs BINARY ne sont pas transformées lors de la conversion de
jeu de caractères.
La sémantique de BINARY est identique à celle de VARBINARY. BINARY est un type de données de
longueur variable. Toutefois, c'est un type de donnée de longueur fixe dans d'autres systèmes de gestion de
bases de données.
Voir aussi
♦ “Type de données VARBINARY”, à la page 83
♦ “Type de données LONG BINARY”, à la page 82
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données IMAGE
Fonction
Stocker des données binaires de longueur arbitraire.
Syntaxe
IMAGE
Types de données binaires
Copyright © 2006, iAnywhere Solutions, Inc. 81
Utilisation
IMAGE est mis en oeuvre en tant que domaine, comme LONG BINARY.
Voir aussi
♦ “Type de données LONG BINARY”, à la page 82
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données LONG BINARY
Fonction
Stocker des données binaires de longueur arbitraire.
Syntaxe
LONG BINARY
Utilisation
La taille maximale est de 2 Go.
Voir aussi
♦ “Type de données BINARY”, à la page 81
♦ “Type de données VARBINARY”, à la page 83
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données UNIQUEIDENTIFIER
Fonction
Stocker des valeurs UUID (également appelées GUID).
Syntaxe
UNIQUEIDENTIFIER
Utilisation
Le type de données UNIQUEIDENTIFIER est généralement utilisé pour une clé primaire ou une autre
colonne unique afin de contenir les valeurs UUID (Universally Unique Identifier ou Identificateur unique
universel) qui identifient des lignes de façon unique. La fonction NEWID crée des valeurs UUID de sorte
que la valeur produite sur un ordinateur soit différente de la valeur générée sur un autre ordinateur. Les
valeurs UNIQUEIDENTIFIER créées à l'aide de NEWID peuvent donc servir de clés dans un environnement
de synchronisation.
Types de données SQL
82 Copyright © 2006, iAnywhere Solutions, Inc.
Par exemple :
CREATE TABLE T1 (
pk UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
c1 INT )
Les valeurs UUID sont aussi appelées GUID (Globally Unique Identifier ou Identificateur unique global).
Par défaut, les valeurs UUID contiennent des tirets et sont ainsi supportées par d'autres SGBDR. Vous pouvez
modifier ce paramètre en attribuant la valeur Off à l'option uuid_has_hyphens.
SQL Anywhere convertit automatiquement les valeurs UNIQUEIDENTIFIER au format chaîne ou binaire,
selon les besoins.
Les valeurs UNIQUEIDENTIFIER sont stockées en tant que valeurs BINARY(16) mais sont décrites en
tant que valeurs BINARY(36) dans les applications clientes. Cette description garantit qu'un espace suffisant
est alloué au résultat si le client lit la valeur comme une chaîne. Dans les applications clientes ODBC, les
valeurs UNIQUEIDENTIFIER se présentent comme des valeurs de type SQL_GUID.
Voir aussi
♦ “Valeur NEWID par défaut” dans le manuel SQL Anywhere Server - Utilisation du SQL
♦ “NEWID (fonction diverse)”, à la page 210
♦ “UUIDTOSTR (fonction de chaîne de caractères)”, à la page 284
♦ “STRTOUUID (fonction de chaîne de caractères)”, à la page 269
♦ “Option uuid_has_hyphens [base de données]” dans le manuel SQL Anywhere Server - Administration
des bases de données
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Type de données VARBINARY
Fonction
Stocker des données binaires d'une longueur maximale spécifiée (en octets).
Syntaxe
VARBINARY [ ( longueur_maximale ) ]
Paramètre
longueur_maximale Longueur maximale de la valeur, en octets. La longueur doit être comprise entre 1
et 32 767. Si elle n'est pas spécifiée, la valeur 1 est utilisée.
Utilisation
Les valeurs VARBINARY font l'objet de comparaisons exactes octet par octet, alors que les valeurs CHAR
sont comparées selon la séquence de classement de la base de données. Si une chaîne binaire est un préfixe
d'une autre, la chaîne la plus courte est considérée comme inférieure à la chaîne la plus longue.
Types de données binaires
Copyright © 2006, iAnywhere Solutions, Inc. 83
Contrairement aux valeurs CHAR, les valeurs VARBINARY ne sont pas transformées lors de la conversion
de jeu de caractères.
VARBINARY peut également être spécifié sous la forme BINARY VARYING. Quelle que soit la syntaxe
utilisée, le type de données est décrit comme VARBINARY.
Voir aussi
♦ “Type de données BINARY”, à la page 81
♦ “Type de données LONG BINARY”, à la page 82
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Types de données SQL
84 Copyright © 2006, iAnywhere Solutions, Inc.
Domaines
Fonction
Les domaines sont des alias pour les types de données intégrés. Le cas échéant, ils comprennent des valeurs
de précision et d'échelle, voire des valeurs DEFAULT et des conditions CHECK. Certains domaines, comme
les types de données monétaires, sont prédéfinis dans SQL Anywhere, mais vous pouvez en créer d'autres.
Les domaines, ou types de données définis par l'utilisateur, permettent de définir automatiquement les
colonnes d'une base avec le même type de données, les mêmes conditions NULL ou NOT NULL, le même
paramètre DEFAULT et la même condition CHECK. Les domaines contribuent à la cohérence des données
dans la base et éliminent certains types d'erreur.
Domaines simples
L'instruction CREATE DOMAIN permet de créer des domaines. Pour obtenir une description complète de
la syntaxe, reportez-vous à la section “Instruction CREATE DOMAIN”, à la page 407.
L'instruction suivante crée le type de données adresse_rue, qui représente une chaîne de 35 caractères :
CREATE DOMAIN adresse_rue CHAR( 35 )
CREATE DATATYPE peut être utilisé à la place de CREATE DOMAIN, mais cette pratique est
déconseillée.
La création de types de données requiert les droits RESOURCE. L'ID de l'utilisateur qui a exécuté
l'instruction CREATE DOMAIN devient le propriétaire du type créé. Tous les utilisateurs peuvent utiliser
le nouveau type. Contrairement aux autres objets de base de données, le nom du propriétaire ne précède
jamais le nom du type de données.
Lors de la définition de colonnes, adresse_rue s'utilise exactement de la même manière que n'importe quel
autre type de données. Par exemple, la table suivante comporte deux colonnes dont l'une est de type
adresse_rue :
CREATE TABLE twocol (
id INT,
rue adresse_rue
)
Les domaines sont supprimés par leur propriétaire ou par un utilisateur disposant des droits DBA, à l'aide
de l'instruction DROP DOMAIN :
DROP DOMAIN adresse_rue
Cette instruction n'est admise que dans la mesure où le type n'est utilisé dans aucune table de la base de
données. Si vous tentez de supprimer un domaine en cours d'utilisation, un message s'affiche pour indiquer
que la clé primaire de la ligne de la table 'SYSUSERTYPE' est référencée dans une autre table.
Contraintes et valeurs par défaut avec les domaines
De nombreux attributs associés aux colonnes, comme la possibilité d'accepter des valeurs NULL, d'avoir
une valeur DEFAULT, etc., peuvent être définis dans un domaine. Ainsi, toute colonne créée avec ce type
hérite automatiquement des attributs spécifiés. Vous pouvez ainsi uniformiser, dans toute la base de données,
les colonnes ayant une signification analogue.
Domaines
Copyright © 2006, iAnywhere Solutions, Inc. 85
Par exemple, plusieurs colonnes clé primaire de la base de données exemple SQL Anywhere contiennent
des entiers correspondant à des numéros d'ID. L'instruction suivante crée un type de données qui peut s'avérer
utile pour de telles colonnes :
CREATE DOMAIN id INT
NOT NULL
DEFAULT AUTOINCREMENT
CHECK( @col > 0 );
Toute colonne utilisant le nouveau type id interdit les valeurs NULL, est auto-incrémentée par défaut et ne
doit contenir que des nombres positifs. N'importe quel identificateur peut être utilisé à la place de col dans
la variable @col.
Si nécessaire, vous pouvez définir explicitement des attributs de colonne, qui seront prioritaires sur ceux
associés au type de données. Une colonne créée avec le type id et autorisant explicitement des valeurs NULL
accepte effectivement les valeurs NULL, quelle que soit la définition du type id.
Compatibilité
♦ Valeurs par défaut et contraintes nommées Dans SQL Anywhere, les domaines sont créés avec
un type de données de base et, éventuellement, une condition NULL ou NOT NULL, une valeur par
défaut et une condition CHECK. Les contraintes nommées et les valeurs par défaut ne sont pas prises
en charge.
♦ Création de types de données Dans SQL Anywhere, vous pouvez utiliser la procédure système
sp_addtype pour ajouter un domaine ou vous servir de l'instruction CREATE DOMAIN.
Types de données SQL
86 Copyright © 2006, iAnywhere Solutions, Inc.
Conversions de types de données
Les conversions de type sont soit effectuées automatiquement, soit demandées explicitement à l'aide des
fonctions CAST ou CONVERT.
Si vous utilisez une chaîne dans une expression numérique ou en tant qu'argument d'une fonction acceptant
un argument numérique, elle est convertie en nombre.
Si vous utilisez un nombre dans une expression de chaîne ou en tant qu'argument d'une fonction manipulant
des chaînes de caractères, il est converti en chaîne avant traitement.
Toutes les constantes de date sont spécifiées sous forme de chaînes. Les chaîne sont automatiquement
converties en dates avant d'être utilisées.
Dans certains cas, cependant, les conversions effectuées automatiquement par la base de données sont
inappropriées :
'12/31/90' + 5
'a' > 0
Ici, la conversion automatique échoue. Vous pouvez utiliser la fonction CAST ou CONVERT pour forcer
les types de conversions. Pour plus d'informations sur les fonctions CAST et CONVERT reportez-vous à la
section “Fonctions de conversion de types de données (UltraLite)”, à la page 99.
Les fonctions suivantes servent également à forcer les conversions de type (reportez-vous à la section
“Informations de référence sur les fonctions SQL UltraLiteFonctions SQL”, à la page 97).
♦ DATE( valeur ) Convertit l'expression en une date et supprime les heures, les minutes et les secondes.
Les erreurs de conversion peuvent être signalées.
♦ STRING( valeur ) Equivalent de CAST (valeur AS LONG VARCHAR).
Pour plus d'informations sur la fonction STRING, reportez-vous à la section “STRING (fonction de
chaîne de caractères)”, à la page 268.
♦ VALUE+0.0 Equivalent de CAST(valeur AS DECIMAL).
F Pour plus d'informations sur la fonction CAST, reportez-vous à la section “CAST (fonction de
conversion de types de données)”, à la page 121.
Conversion en cas d'utilisation d'opérateurs de comparaison
Lorsqu'une comparaison (=, par exemple) est effectuée entre des arguments de différents types de données,
l'un des arguments (voire les deux) doit être converti afin que la comparaison ne porte que sur un seul type
de données. Il est parfois préférable de convertir l'un des arguments de manière explicite à l'aide de CAST
ou de CONVERT.
SQL Anywhere utilise les règles suivantes pour effectuer une comparaison (ces règles sont examinées dans
l'ordre indiqué et la première qui s'applique est utilisée) :
Conversions de types de données
Copyright © 2006, iAnywhere Solutions, Inc. 87
1. Si l'un des arguments est de type TIME, convertissez-les en TIME et comparez-les.
2. Si un argument est de type TINYINT et l'autre de type INTEGER, convertissez-les en INTEGER et
comparez-les.
3. Si un argument est de type TINYINT et l'autre de type SMALLINT, convertissez-les en SMALLINT
et comparez-les.
4. Si un argument est de type UNSIGNED SMALLINT et l'autre de type INTEGER, convertissez-les en
INTEGER et comparez-les.
5. Si les types de données des arguments ont le même supertype, convertissez les arguments pour leur
affecter ce supertype commun et comparez-les. Les supertypes constituent le type de données final de
chacune des listes suivantes :
♦ BIT→TINYINT→UNSIGNED SMALLINT→UNSIGNED INTEGER→UNSIGNED
BIGINT→NUMERIC
♦ SMALLINT→INTEGER→BIGINT→NUMERIC
♦ REAL→DOUBLE
♦ CHAR→LONG VARCHAR
♦ BINARY→LONG BINARY
♦ DATE→TIMESTAMP
Par exemple, si les arguments sont respectivement de type BIT et TINYINT, ils sont convertis en
NUMERIC.
6. Si l'un des arguments est de type DATE ou TIMESTAMP, convertissez-les en TIMESTAMP et
comparez-les.
Par exemple, si les deux arguments sont de type REAL et DATE, ils sont l'un et l'autre convertis en
TIMESTAMP.
7. Si l'un des arguments est de type UNIQUEIDENTIFIER, convertissez-les en UNIQUEIDENTIFIER
et comparez-les.
8. Si l'un des arguments est de type CHARACTER et l'autre de type BINARY, convertissez-les en
BINARY et comparez-les.
9. Si l'un des arguments est de type NUMERIC et l'autre de type FLOAT, convertissez-les tous les deux
en DOUBLE et comparez-les.
10. Convertissez les arguments en NUMERIC et comparez-les.
Par exemple, si les deux arguments sont de type REAL et CHAR, ils sont tous les deux convertis en
NUMERIC.
Remarques
♦ Vous pouvez ignorer ces règles en convertissant de manière explicite les arguments en un autre type.
Par exemple, si vous voulez comparer un argument de type DATE et un argument de type CHAR comme
Types de données SQL
88 Copyright © 2006, iAnywhere Solutions, Inc.
s'ils étaient tous les deux de type CHAR, vous devez convertir explicitement l'argument de type DATE
en type CHAR.
Pour plus d'informations, reportez-vous à la section “CAST (fonction de conversion de types de
données)”, à la page 121.
♦ Les règles 1, 6 et 10 sont susceptibles d'entraîner des échecs de conversion.
Conversion de constantes NULL en types NUMERIC et chaîne
Lors de la conversion d'une constante NULL en NUMERIC ou en valeur de type chaîne, comme CHAR,
VARCHAR, LONG VARCHAR, BINARY, VARBINARY et LONG BINARY, la valeur 0 est attribuée à
la taille. Par exemple :
SELECT CAST( NULL AS CHAR ) renvoie CHAR(0)
SELECT CAST( NULL AS NUMERIC ) renvoie NUMERIC(1,0)
Conversion de chaînes ambiguës en dates
SQL Anywhere convertit automatiquement une chaîne en date lorsqu'une valeur de date est attendue, et ce
même si l'année indiquée dans la chaîne ne comporte que deux chiffres.
Si la partie "siècle" d'une année est omise, la méthode de conversion est déterminée par l'option de base de
données nearest_century.
L'option nearest_century est une valeur numérique qui joue le rôle de bascule entre les valeurs de date faisant
référence aux années 1900 et 2000.
Les années indiquées par deux chiffres et inférieures à la valeur de nearest_century sont converties en 20aa,
tandis que les années supérieures ou égales à cette valeur sont converties en 19aa.
Si cette option n'est pas définie, la valeur par défaut 50 est utilisée. Les années en deux chiffres sont alors
supposées être comprises entre 1950 et 2049.
L'option nearest_century est disponible depuis la version 5.5 de SQL Anywhere. Dans cette version, la valeur
par défaut était 0.
Exemples de conversion de dates ambiguës
L'instruction suivante crée une table qui permet d'illustrer la conversion d'informations de date ambiguës
dans SQL Anywhere :
CREATE TABLE T1 (C1 DATE);
La table T1 contient une colonne C1 de type DATE.
L'instruction suivante insère une valeur de date dans la colonne C1. SQL Anywhere convertit
automatiquement la chaîne contenant une valeur d'année ambiguë : deux chiffres pour l'année mais rien pour
indiquer le siècle.
INSERT INTO T1 VALUES('00-01-01');
Conversions de types de données
Copyright © 2006, iAnywhere Solutions, Inc. 89
La valeur par défaut de l'option nearest_century étant 50, SQL Anywhere convertit la chaîne ci-dessus et
obtient la date 2000-01-01. L'instruction suivante permet de vérifier le résultat de cette insertion :
SELECT * FROM T1;
Pour modifier le processus de conversion, changez la valeur de nearest_century comme suit :
SET OPTION nearest_century = 0;
Si vous exécutez la même instruction d'insertion avec nearest_century fixée à 0, la date obtenue est différente :
INSERT INTO T1 VALUES('00-01-01');
Cette instruction insère désormais la date 1900-01-01. Vérifiez le résultat comme suit :
SELECT * FROM T1;
Conversion des dates en chaînes
SQL Anywhere offre plusieurs fonctions permettant de convertir des valeurs SQL Anywhere de type date
et heure en toutes sortes de chaînes et d'expressions. Il est possible, lors de la conversion d'une valeur de
date en une chaîne, de réduire à deux chiffres le nombre représentant l'année, laissant par conséquent tomber
la partie associée au siècle.
Valeurs de siècle erronées
Considérons l'instruction suivante, qui convertit de façon incorrecte la chaîne représentant la date
"Janvier 1, 2000" en une chaîne contenant "Janvier 1, 1900", même si aucune erreur de base de données ne
s'est produite.
SELECT DATEFORMAT (
DATEFORMAT('2000-01-01', 'Mmm dd/yy' ),
'yyyy-Mmm-dd' )
AS Wrong_year;
SQL Anywhere convertit automatiquement et correctement la chaîne de date non ambiguë 2000-01-01 en
valeur de date. Toutefois, le format 'Mmm dd/yy' de la fonction DATEFORMAT interne (ou imbriquée)
supprime la partie de la date correspondant au siècle lorsque celle-ci est reconvertie en chaîne et transmise
à la fonction DATEFORMAT externe.
Dans l'exemple ci-dessus, la valeur de l'option de base de données nearest_century est 0. Par conséquent, la
fonction DATEFORMAT externe convertit la chaîne de date comportant une valeur d'année à deux chiffres
en une année comprise entre 1900 et 1999.
F Pour plus d'informations sur les fonctions de date et d'heure, reportez-vous à la section “Fonctions de
date et d'heure (UltraLite)”, à la page 100.
Types de données SQL
90 Copyright © 2006, iAnywhere Solutions, Inc.
Conversion de tableaux binaires
Conversion d'entiers en tableaux binaires
Lors de la conversion d'un entier en tableau binaire, la longueur du tableau binaire correspond au nombre
de bits de l'entier, tandis que sa valeur est la représentation binaire de l'entier. Le bit le plus significatif de
l'entier devient le premier bit du tableau.
Exemples
♦ SELECT CAST( CAST( 1 AS BIT ) AS VARBIT ) renvoie une valeur VARBIT(1) contenant 1.
♦ SELECT CAST( CAST( 8 AS TINYINT ) AS VARBIT ) revoie une valeur VARBIT(8)
contenant 00001000.
♦ SELECT CAST( CAST( 194 AS INTEGER ) AS VARBIT ) renvoie une valeur VARBIT(32)
contenant 00000000000000000000000011000010.
Conversion de valeurs binaires en tableaux binaires
Lors de la conversion d'un type binaire de longueur n en tableau binaire, la longueur du tableau est n * 8 bits.
Les 8 premiers bits du tableau binaire deviennent le premier octet de la valeur binaire. Le bit le plus significatif
de la valeur binaire devient le premier bit du tableau. Les 8 bits suivants du tableau binaire deviennent le
deuxième octet de la valeur binaire, et ainsi de suite.
Exemple
♦ SELECT CAST( 0x8181 AS VARBIT ) renvoie une valeur VARBIT(16) contenant
1000000110000001.
Conversion de caractères en tableaux binaires
Lors de la conversion de données de type caractère de longueur n en tableau binaire, la longueur du tableau
est n bits. Chaque caractère doit être '0' ou '1' et la valeur 0 ou 1 est attribuée au bit correspondant du tableau
binaire.
Exemple
♦ SELECT CAST( '001100' AS VARBIT ) renvoie une valeur VARBIT(6) contenant 001100.
Conversion de tableaux binaires en entiers
Lors de la conversion d'un tableau binaire en données de type binaire, la valeur binaire du tableau binaire
est interprétée selon le format de stockage du type d'entier, en utilisant le bit le plus significatif en premier.
Exemple
♦ SELECT CAST( CAST( '11000010' AS VARBIT ) AS INTEGER ) renvoie 194
(110000102 = 0xC2 = 194).
Conversion de tableaux binaires en valeurs binaires
Lors de la conversion d'un tableau binaire en valeur binaire, les 8 premiers bits du tableau deviennent le
premier octet de la valeur binaire. Le premier bit du tableau devient le bit le plus significatif de la valeur
binaire. Les 8 bits suivants deviennent le deuxième octet, etc. Si la longueur du tableau binaire n'est pas un
Conversions de types de données
Copyright © 2006, iAnywhere Solutions, Inc. 91
multiple de 8, des zéros supplémentaires sont utilisés pour remplir les bits les moins significatifs du dernier
octet de la valeur binaire.
Exemples
♦ SELECT CAST( CAST( '1111' AS VARBIT ) AS BINARY ) renvoie 0xF0 (11112 devient
111100002 = 0xF0).
♦ SELECT CAST( CAST( '0011000000110001' AS VARBIT ) AS BINARY ) renvoie
0x3031 (00110000001100012 = 0x3031).
Conversion de tableaux binaires en caractères
Lors de la conversion d'un tableau binaire de longueur n en données de type caractère, la longueur du résultat
est n caractères. Chaque caractère du résultat est '0' ou '1', correspondant au bit du tableau.
Exemple
♦ SELECT CAST( CAST( '01110' AS VARBIT ) AS VARCHAR ) renvoie la chaîne de
caractères '01110'.
Conversion entre jeux de caractères
SQL Anywhere applique automatiquement une conversion de jeu de caractères lors de l'évaluation
d'expressions. Généralement, si une opération requiert une interaction entre un type CHAR et un type
NCHAR, le type CHAR est converti en NCHAR.
Dans certains cas, comme lors de l'affectation d'une valeur de résultat, un type NCHAR doit être converti
en CHAR. Des erreurs de conversion peuvent alors se produire si la chaîne NCHAR contient des caractères
qui ne peuvent pas être représentés dans le type CHAR. En cas d'erreur de conversion, le caractère qui ne
peut pas être représenté est converti dans le caractère de substitution du jeu de caractères CHAR. Pour les
jeux de caractères codés sur un octet, il s'agit généralement de hex 1A.
Voir aussi
♦ “CAST (fonction de conversion de types de données)”, à la page 121
♦ “CONVERT (fonction de conversion de types de données)”, à la page 132
♦ “CAST (fonction de conversion de types de données)”, à la page 121
Conversion entre jeux numériques
Lors de la conversion d'un type DOUBLE en type NUMERIC, la précision est conservée pour les 15 premiers
chiffres significatifs.
Voir aussi
♦ “CAST (fonction de conversion de types de données)”, à la page 121
♦ “CONVERT (fonction de conversion de types de données)”, à la page 132
♦ “CAST (fonction de conversion de types de données)”, à la page 121
Types de données SQL
92 Copyright © 2006, iAnywhere Solutions, Inc.
Conversion de types de données Java et SQL
La conversion de types de données Java et SQL est requise pour les procédures stockées Java et les
applications JDBC. Les conversions entre types de données Java et SQL s'effectuent conformément au
standard JDBC. Le tableau ci-dessous en dresse la liste :
Conversion de types de données Java en SQL
Type Java Type SQL
String CHAR
String VARCHAR
String TEXT
java.math.BigDecimal NUMERIC
java.math.BigDecimal MONEY
java.math.BigDecimal SMALLMONEY
boolean BIT
byte TINYINT
Short SMALLINT
Int INTEGER
long INTEGER
float REAL
double DOUBLE
byte[ ] VARBINARY
byte[ ] IMAGE
java.sql.Date DATE
java.sql.Time TIME
java.sql.Timestamp TIMESTAMP
java.lang.Double DOUBLE
java.lang.Float REAL
java.lang.Integer INTEGER
Conversion de types de données Java et SQL
Copyright © 2006, iAnywhere Solutions, Inc. 93
Type Java Type SQL
java.lang.Long INTEGER
void this1
Conversion de types de données SQL en Java
Type SQL Type Java
CHAR String
VARCHAR String
TEXT String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
MONEY java.math.BigDecimal
SMALLMONEY java.math.BigDecimal
BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[ ]
VARBINARY byte[ ]
LONG VARBINARY byte[ ]
IMAGE byte[ ]
DATE java.sql.Date
1 La méthode renvoie une valeur, c'est-à-dire l'objet lui-même.
Types de données SQL
94 Copyright © 2006, iAnywhere Solutions, Inc.
Type SQL Type Java
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
Conversion de types de données Java et SQL
Copyright © 2006, iAnywhere Solutions, Inc. 95
Chapitre 3
Fonctions SQL
Table des matières
Types de fonction ........................................................................................................ 98
Liste alphabétique des fonctions ............................................................................... 108
Présentation
Ces fonctions renvoient des informations d'une base de données. Elles peuvent être utilisées partout où une
expression est autorisée. Ce chapitre regroupe les fonctions par type puis fournit une liste alphabétique des
fonctions.
Avant de commencer
Les fonctions utilisent les mêmes conventions syntaxiques que les instructions SQL. Vous devez comprendre
ces conventions et la façon dont elles sont utilisées dans ce chapitre.
F Pour obtenir la liste complète des conventions syntaxiques, reportez-vous à la section “Conventions
syntaxiques”, à la page 309.
Copyright © 2006, iAnywhere Solutions, Inc. 97
Types de fonction
Cette section regroupe les fonctions par type.
Fonctions d'agrégat
Les fonctions d'agrégat regroupent des données appartenant à un groupe de lignes issues de la base de
données. Ces groupes sont formés à l'aide de la clause GROUP BY de l'instruction SELECT. Les fonctions
d'agrégat ne sont autorisées que dans la liste de sélection, ainsi que dans les clauses HAVING et ORDER BY
d'une instruction SELECT.
Liste des fonctions
Voici les fonctions d'agrégat disponibles :
♦ “AVG (fonction d'agrégat)”, à la page 112
♦ “BIT_AND (fonction d'agrégat)”, à la page 116
♦ “BIT_OR (fonction d'agrégat)”, à la page 117
♦ “BIT_XOR (fonction d'agrégat)”, à la page 118
♦ “COVAR_POP (fonction d'agrégat)”, à la page 138
♦ “COVAR_SAMP (fonction d'agrégat)”, à la page 139
♦ “COUNT (fonction d'agrégat)”, à la page 136
♦ “CORR (fonction d'agrégat)”, à la page 134
♦ “GROUPING (fonction d'agrégat)”, à la page 178
♦ “LIST (fonction d'agrégat)”, à la page 197
♦ “MAX (fonction d'agrégat)”, à la page 203
♦ “MIN (fonction d'agrégat)”, à la page 204
♦ “REGR_AVGX (fonction d'agrégat)”, à la page 229
♦ “REGR_AVGY (fonction d'agrégat)”, à la page 231
♦ “REGR_COUNT (fonction d'agrégat)”, à la page 232
♦ “REGR_INTERCEPT (fonction d'agrégat)”, à la page 233
♦ “REGR_R2 (fonction d'agrégat)”, à la page 235
♦ “REGR_SLOPE (fonction d'agrégat)”, à la page 236
♦ “REGR_SXX (fonction d'agrégat)”, à la page 237
♦ “REGR_SXY (fonction d'agrégat)”, à la page 239
♦ “REGR_SYY (fonction d'agrégat)”, à la page 240
♦ “SET_BITS (fonction d'agrégat)”, à la page 254
♦ “STDDEV (fonction d'agrégat)”, à la page 265
♦ “STDDEV_POP (fonction d'agrégat)”, à la page 265
♦ “STDDEV_SAMP (fonction d'agrégat)”, à la page 266
♦ “SUM (fonction d'agrégat)”, à la page 273
♦ “VAR_POP (fonction d'agrégat)”, à la page 285
♦ “VAR_SAMP (fonction d'agrégat)”, à la page 286
♦ “VARIANCE (fonction d'agrégat)”, à la page 287
♦ “XMLAGG (fonction d'agrégat)”, à la page 290
Fonctions SQL
98 Copyright © 2006, iAnywhere Solutions, Inc.
Fonctions de tableau binaire
Les fonctions de tableau binaire permettent de réaliser des tâches sur des tableaux binaires. Ces fonctions
sont les suivantes :
♦ “BIT_AND (fonction d'agrégat)”, à la page 116
♦ “BIT_OR (fonction d'agrégat)”, à la page 117
♦ “BIT_XOR (fonction d'agrégat)”, à la page 118
♦ “BIT_LENGTH (fonction de tableau binaire)”, à la page 114
♦ “BIT_SUBSTR (fonction de tableau binaire)”, à la page 115
♦ “COUNT_SET_BITS (fonction de tableau binaire)”, à la page 137
♦ “GET_BIT (fonction de tableau binaire)”, à la page 173
♦ “SET_BIT (fonction de tableau binaire)”, à la page 253
♦ “SET_BITS (fonction d'agrégat)”, à la page 254
Pour plus d'informations sur les opérateurs de manipulation de bits, reportez-vous à la section “Opérateurs
de manipulation de bits”, à la page 14.
Fonctions de classement
Les fonctions de classement permettent de calculer une valeur de classement pour chaque ligne d'un jeu de
résultats en fonction d'un ordre spécifié dans la requête.
♦ “CUME_DIST (fonction de classement)”, à la page 142
♦ “DENSE_RANK (fonction de classement)”, à la page 158
♦ “PERCENT_RANK (fonction de classement)”, à la page 219
♦ “RANK (fonction de classement)”, à la page 228
Fonctions de conversion de types de données
Les fonctions de conversion de types de données servent à convertir des arguments d'un type de données
dans un autre type ou à vérifier s'ils peuvent être convertis.
Liste des fonctions
Les fonctions de conversion de types de données suivantes sont disponibles :
♦ “CAST (fonction de conversion de types de données)”, à la page 121
♦ “CONVERT (fonction de conversion de types de données)”, à la page 132
♦ “HEXTOINT (fonction de conversion de types de données)”, à la page 180
♦ “INTTOHEX (fonction de conversion de types de données)”, à la page 191
♦ “CONVERT (fonction de conversion de types de données)”, à la page 192
♦ “ISNUMERIC (fonction diverse)”, à la page 193
Types de fonction
Copyright © 2006, iAnywhere Solutions, Inc. 99
Fonctions de date et d'heure
Les fonctions de date et d'heure effectuent des opérations sur les types de données date et heure et renvoient
des informations relatives à la date et à l'heure.
Dans ce chapitre, le terme datetime (dateheure) sert à désigner la date, l'heure ou l'estampille (timestamp).
Le type de données correspondant est DATETIME.
F Pour plus d'informations sur les types de données datetime, reportez-vous à la section “Types de données
date et heure”, à la page 73.
Liste des fonctions
Les fonctions de date et d'heure suivantes sont disponibles :
♦ “DATE (fonction de date et d'heure)”, à la page 144
♦ “DATEADD (fonction de date et d'heure)”, à la page 144
♦ “DATEDIFF (fonction de date et d'heure)”, à la page 145
♦ “DATEFORMAT (fonction de date et d'heure)”, à la page 146
♦ “DATENAME (fonction de date et d'heure)”, à la page 147
♦ “DATEPART (fonction de date et d'heure)”, à la page 147
♦ “DATETIME (fonction de date et d'heure)”, à la page 148
♦ “DAY (fonction de date et d'heure)”, à la page 149
♦ “DAYNAME (fonction de date et d'heure)”, à la page 149
♦ “DAYS (fonction de date et d'heure)”, à la page 150
♦ “DOW (fonction de date et d'heure)”, à la page 160
♦ “GETDATE (fonction de date et d'heure)”, à la page 175
♦ “HOUR (fonction de date et d'heure)”, à la page 181
♦ “HOURS (fonction de date et d'heure)”, à la page 181
♦ “MINUTE (fonction de date et d'heure)”, à la page 205
♦ “MINUTES (fonction de date et d'heure)”, à la page 206
♦ “MONTH [fonction de date et d'heure]”, à la page 208
♦ “MONTHNAME (fonction de date et d'heure)”, à la page 208
♦ “MONTHS (fonction de date et d'heure)”, à la page 209
♦ “NOW (fonction de date et d'heure)”, à la page 216
♦ “QUARTER (fonction de date et d'heure)”, à la page 225
♦ “SECOND (fonction de date et d'heure)”, à la page 251
♦ “SECONDS (fonction de date et d'heure)”, à la page 252
♦ “TODAY (fonction de date et d'heure)”, à la page 277
♦ “WEEKS (fonction de date et d'heure)”, à la page 289
♦ “YEAR (fonction de date et d'heure)”, à la page 296
♦ “YEARS (fonction de date et d'heure)”, à la page 297
♦ “YMD (fonction de date et d'heure)”, à la page 298
Parties de date
La plupart des fonctions de date utilisent des données compilées à partir de parties de date. Le tableau
suivant affiche les valeurs de parties de date autorisées.
Fonctions SQL
100 Copyright © 2006, iAnywhere Solutions, Inc.
Partie de date Abréviation Valeurs
Year (année) yy 1–9999
Quarter (trimestre) qq 1–4
Month (mois) mm 1–12
Week (semaine) wk 1–54. Les semaines commencent le dimanche.
Day (jour) dd 1–31
Dayofyear (jour de
l'année)
dy 1–366
Weekday (jour de la
semaine)
dw 1–7 (dimanche = 1, …, samedi = 7)
Hour (heure) hh 0–23
Minute mi 0–59
Second (seconde) ss 0–59
Millisecond (milliseconde)
ms 0–999
Calyearofweek (année
calendaire de la
semaine)
cyr Entier. Année au cours de laquelle la semaine commence.
Selon le jour de la semaine où l'année a commencé, il est
possible que la semaine contenant les premiers jours de
l'année ait débuté l'année précédente. Les années qui commencent
entre un lundi et un jeudi n'ont aucun jour dans
l'année précédente, tandis que la première semaine d'une
année qui débute entre un vendredi et un dimanche commence
le premier lundi de l'année.
Calweekofyear (semaine
calendaire de
l'année)
cwk 1–54. Numéro de la semaine comprenant la date indiquée.
Caldayofweek (jour
calendaire de la semaine)
cdw 1–7. (lundi = 1, …, dimanche = 7)
Fonctions définies par l'utilisateur
Il existe deux mécanismes de création de fonctions définies par l'utilisateur dans SQL Anywhere : vous
pouvez écrire la fonction en langage SQL ou utiliser Java.
Types de fonction
Copyright © 2006, iAnywhere Solutions, Inc. 101
Fonctions définies par l'utilisateur en SQL
Pour créer vos propres fonctions SQL, utilisez l'instruction décrite à la section “Instruction CREATE
FUNCTION”, à la page 423. Lorsqu'elle est déclarée dans une instruction CREATE FUNCTION,
l'instruction RETURN détermine le type de données de la fonction.
Une fois créée, une fonction SQL définie par l'utilisateur peut être utilisée avec n'importe quelle fonction
intégrée du même type de données.
F Pour plus d'informations sur la création de fonctions SQL, reportez-vous à la section “Utilisation des
procédures, des triggers et des batchs” dans le manuel SQL Anywhere Server - Utilisation du SQL.
Fonctions définies par l'utilisateur en Java
Les classes Java permettent de créer plus simplement des fonctions utilisateur qui, le cas échéant, peuvent
être copiées d'un serveur de base de données vers une application cliente.
Toute méthode d'une classe Java installée peut s'utiliser avec n'importe quelle fonction intégrée du même
type de données.
Les méthodes d'instance sont liées aux instances spécifiques d'une classe et, par conséquent, se comportent
différemment des fonctions définies par l'utilisateur.
F Pour plus d'informations sur la création de classes Java et sur les méthodes de classe, reportez-vous à la
section “Création d'une classe” dans le manuel SQL Anywhere Server - Programmation.
Fonctions diverses
Ces fonctions effectuent des opérations sur des expressions arithmétiques, de type chaîne ou de type date/
heure, incluant des valeurs renvoyées par d'autres fonctions.
Liste des fonctions
Les fonctions diverses suivantes sont disponibles :
♦ “ARGN (fonction diverse)”, à la page 109
♦ “COALESCE (fonction diverse)”, à la page 125
♦ “COMPRESS (fonction de chaîne de caractères)”, à la page 127
♦ “CONFLICT (fonction diverse)”, à la page 130
♦ “DECOMPRESS (fonction de chaîne de caractères)”, à la page 155
♦ “DECRYPT (fonction de chaîne de caractères)”, à la page 156
♦ “ENCRYPT (fonction de chaîne de caractères)”, à la page 161
♦ “ERRORMSG (fonction diverse)”, à la page 162
♦ “ESTIMATE (fonction diverse)”, à la page 163
♦ “ESTIMATE_SOURCE (fonction diverse)”, à la page 164
♦ “EXPERIENCE_ESTIMATE (fonction diverse)”, à la page 170
♦ “EXPLANATION (fonction diverse)”, à la page 171
♦ “EXPRTYPE (fonction diverse)”, à la page 172
♦ “GET_IDENTITY (fonction diverse)”, à la page 174
♦ “GRAPHICAL_PLAN (fonction diverse)”, à la page 176
Fonctions SQL
102 Copyright © 2006, iAnywhere Solutions, Inc.
♦ “GREATER (fonction diverse)”, à la page 177
♦ “IDENTITY (fonction diverse)”, à la page 189
♦ “IFNULL (fonction diverse)”, à la page 189
♦ “INDEX_ESTIMATE (fonction diverse)”, à la page 190
♦ “ISNULL (fonction diverse)”, à la page 193
♦ “LESSER (fonction diverse)”, à la page 196
♦ “NEWID (fonction diverse)”, à la page 210
♦ “NULLIF (fonction diverse)”, à la page 216
♦ “NUMBER (fonction diverse)”, à la page 217
♦ “PLAN (fonction diverse)”, à la page 221
♦ “REWRITE (fonction diverse)”, à la page 245
♦ “ROW_NUMBER (fonction diverse)”, à la page 249
♦ “SQLDIALECT (fonction diverse)”, à la page 263
♦ “TRACEBACK (fonction diverse)”, à la page 277
♦ “TRANSACTSQL (fonction diverse)”, à la page 278
♦ “VAREXISTS (fonction diverse)”, à la page 288
♦ “WATCOMSQL (fonction diverse)”, à la page 288
Fonctions numériques
Ces fonctions effectuent des opérations mathématiques sur des données de type numérique et renvoient des
informations numériques.
Liste des fonctions
Les fonctions numériques suivantes sont disponibles :
♦ “ABS (fonction numérique)”, à la page 108
♦ “ACOS (fonction numérique)”, à la page 108
♦ “ASIN (fonction numérique)”, à la page 110
♦ “ATAN (fonction numérique)”, à la page 111
♦ “ATAN2 (fonction numérique)”, à la page 111
♦ “CEILING (fonction numérique)”, à la page 122
♦ “COS (fonction numérique)”, à la page 135
♦ “COT (fonction numérique)”, à la page 135
♦ “DEGREES (fonction numérique)”, à la page 157
♦ “EXP (fonction numérique)”, à la page 169
♦ “FLOOR (fonction numérique)”, à la page 173
♦ “LOG (fonction numérique)”, à la page 201
♦ “LOG10 (fonction numérique)”, à la page 201
♦ “MOD (fonction numérique)”, à la page 207
♦ “PI (fonction numérique)”, à la page 221
♦ “POWER (fonction numérique)”, à la page 222
♦ “RADIANS (fonction numérique)”, à la page 226
♦ “RAND (fonction numérique)”, à la page 227
♦ “REMAINDER (fonction numérique)”, à la page 241
♦ “ROUND (fonction numérique)”, à la page 247
Types de fonction
Copyright © 2006, iAnywhere Solutions, Inc. 103
♦ “SIGN (fonction numérique)”, à la page 256
♦ “SIN (fonction numérique)”, à la page 257
♦ “SQRT (fonction numérique)”, à la page 264
♦ “TAN (fonction numérique)”, à la page 274
♦ “TRUNCNUM (fonction numérique)”, à la page 280
Fonctions HTTP et SOAP
Les fonctions HTTP permettent le traitement de demandes HTTP dans le cadre de services Web. De la même
manière, les fonctions SOAP permettent le traitement de demandes SOAP dans le cadre de services Web.
Liste des fonctions
Les fonctions HTTP suivantes sont disponibles :
♦ “HTML_DECODE (fonction diverse)”, à la page 183
♦ “HTML_ENCODE (fonction diverse)”, à la page 183
♦ “HTTP_DECODE (fonction HTTP)”, à la page 184
♦ “HTTP_ENCODE (fonction HTTP)”, à la page 185
♦ “HTTP_HEADER (fonction HTTP)”, à la page 186
♦ “HTTP_VARIABLE (fonction HTTP)”, à la page 187
♦ “NEXT_HTTP_HEADER (fonction HTTP)”, à la page 214
♦ “NEXT_HTTP_VARIABLE (fonction HTTP)”, à la page 214
Les fonctions SOAP suivantes sont disponibles :
♦ “NEXT_SOAP_HEADER (fonction SOAP)”, à la page 215
♦ “SOAP_HEADER (fonction SOAP)”, à la page 258
Fonctions de chaîne
Les fonctions de chaîne de caractères effectuent des opérations de conversion, d'extraction et de manipulation
de chaînes ou renvoient des informations relatives à des chaînes.
Si vous faites appel à un jeu de caractères codés sur plusieurs octets, vérifiez que la fonction utilisée renvoie
des informations relatives à des caractères ou à des octets.
Liste des fonctions
Les fonctions de chaîne de caractères suivantes sont disponibles :
♦ “ASCII (fonction de chaîne de caractères)”, à la page 109
♦ “BASE64_DECODE (fonction de chaîne de caractères)”, à la page 113
♦ “BASE64_ENCODE (fonction de chaîne de caractères)”, à la page 114
♦ “BYTE_LENGTH (fonction de chaîne de caractères)”, à la page 119
♦ “BYTE_SUBSTR (fonction de chaîne de caractères)”, à la page 120
♦ “CHAR [fonction de chaîne de caractères]”, à la page 122
Fonctions SQL
104 Copyright © 2006, iAnywhere Solutions, Inc.
♦ “CHARINDEX (fonction de chaîne de caractères)”, à la page 123
♦ “CHAR_LENGTH (fonction de chaîne de caractères)”, à la page 124
♦ “COMPARE (fonction de chaîne de caractères)”, à la page 125
♦ “COMPRESS (fonction de chaîne de caractères)”, à la page 127
♦ “CSCONVERT (fonction de chaîne de caractères)”, à la page 140
♦ “DECOMPRESS (fonction de chaîne de caractères)”, à la page 155
♦ “DECRYPT (fonction de chaîne de caractères)”, à la page 156
♦ “DIFFERENCE (fonction de chaîne de caractères)”, à la page 159
♦ “ENCRYPT (fonction de chaîne de caractères)”, à la page 161
♦ “HASH (fonction de chaîne de caractères)”, à la page 179
♦ “INSERTSTR (fonction de chaîne de caractères)”, à la page 191
♦ “LCASE (fonction de chaîne de caractères)”, à la page 194
♦ “LEFT (fonction de chaîne de caractères)”, à la page 195
♦ “LENGTH (fonction de chaîne de caractères)”, à la page 196
♦ “LOCATE (fonction de chaîne de caractères)”, à la page 199
♦ “LOWER (fonction de chaîne de caractères)”, à la page 202
♦ “LTRIM (fonction de chaîne de caractères)”, à la page 202
♦ “PATINDEX (fonction de chaîne de caractères)”, à la page 218
♦ “REPEAT (fonction de chaîne de caractères)”, à la page 242
♦ “REPLACE (fonction de chaîne de caractères)”, à la page 242
♦ “REPLICATE (fonction de chaîne de caractères)”, à la page 244
♦ “REVERSE (fonction de chaîne de caractères)”, à la page 244
♦ “RIGHT (fonction de chaîne de caractères)”, à la page 247
♦ “RTRIM (fonction de chaîne de caractères)”, à la page 251
♦ “SIMILAR (fonction de chaîne de caractères)”, à la page 256
♦ “SORTKEY (fonction de chaîne de caractères)”, à la page 259
♦ “SOUNDEX (fonction de chaîne de caractères)”, à la page 262
♦ “SPACE (fonction de chaîne de caractères)”, à la page 263
♦ “STR (fonction de chaîne de caractères)”, à la page 267
♦ “STRING (fonction de chaîne de caractères)”, à la page 268
♦ “STRTOUUID (fonction de chaîne de caractères)”, à la page 269
♦ “STUFF (fonction de chaîne de caractères)”, à la page 270
♦ “SUBSTRING (fonction de chaîne de caractères)”, à la page 271
♦ “TO_CHAR (fonction de chaîne de caractères)”, à la page 275
♦ “TO_NCHAR (fonction de chaîne de caractères)”, à la page 276
♦ “TRIM (fonction de chaîne de caractères)”, à la page 279
♦ “UCASE (fonction de chaîne de caractères)”, à la page 281
♦ “UNICODE (fonction de chaîne de caractères)”, à la page 281
♦ “UNISTR (fonction de chaîne de caractères)”, à la page 282
♦ “UPPER (fonction de chaîne de caractères)”, à la page 283
♦ “UUIDTOSTR (fonction de chaîne de caractères)”, à la page 284
♦ “XMLCONCAT (fonction de chaîne de caractères)”, à la page 291
♦ “XMLELEMENT (fonction de chaîne de caractères)”, à la page 292
♦ “XMLFOREST (fonction de chaîne de caractères)”, à la page 294
♦ “XMLGEN (fonction de chaîne de caractères)”, à la page 295
Types de fonction
Copyright © 2006, iAnywhere Solutions, Inc. 105
Fonctions système
Les fonctions système renvoient des informations système.
Liste des fonctions
Les fonctions système suivantes sont disponibles :
♦ “CONNECTION_EXTENDED_PROPERTY (fonction de chaîne de caractères)”, à la page 128
♦ “CONNECTION_PROPERTY (fonction système)”, à la page 129
♦ “DATALENGTH (fonction système)”, à la page 143
♦ “DB_ID (fonction système)”, à la page 153
♦ “DB_NAME (fonction système)”, à la page 153
♦ “DB_EXTENDED_PROPERTY (fonction système)”, à la page 151
♦ “DB_PROPERTY (fonction système)”, à la page 154
♦ “EVENT_CONDITION (fonction système)”, à la page 165
♦ “EVENT_CONDITION_NAME (fonction système)”, à la page 167
♦ “EVENT_PARAMETER (fonction système)”, à la page 167
♦ “NEXT_CONNECTION (fonction système)”, à la page 212
♦ “NEXT_DATABASE (fonction système)”, à la page 213
♦ “PROPERTY (fonction système)”, à la page 223
♦ “PROPERTY_DESCRIPTION (fonction système)”, à la page 224
♦ “PROPERTY_NAME (fonction système)”, à la page 224
♦ “PROPERTY_NUMBER (fonction système)”, à la page 225
Remarques
♦ Dans SQL Anywhere, certaines fonctions système sont supportées sous forme de procédures stockées.
♦ Les fonctions db_id, db_name et datalength sont mises en oeuvre sous forme de fonctions intégrées.
Les fonctions système prises en charge sont décrites dans le tableau suivant.
Fonction système Description
col_length( nom_table, nom_colonne, ) Renvoie la longueur de la colonne
col_name( id_table, id_colonne [, id_basededonnées]
)
Renvoie le nom de la colonne
datalength( expression ) Renvoie la taille de l'expression en octets.
db_id( [ nom_basededonnées ] ) Renvoie le numéro d'identification de la base
db_name( [ id_basededonnées ] ) Renvoie le nom de la base
index_col ( nom_table, id_index, clé_# [, id_utilisateur]
)
Renvoie le nom de la colonne indexée
object_id ( nom_objet ) Renvoie l'ID de l'objet
Fonctions SQL
106 Copyright © 2006, iAnywhere Solutions, Inc.
Fonction système Description
object_name ( id_objet [, id_basededonnées ] ) Renvoie le nom de l'objet
suser_id( [ nom_utilisateur ] ) Renvoie le numéro d'identification (entier) de
l'utilisateur
suser_name( [ id_utilisateur ] ) Renvoie l'ID de l'utilisateur
tsequal ( estampille, estampille2 ) Dans SQL Anywhere, la fonction tsequal compare
les valeurs d'estampille (tronquées aux millisecondes)
pour empêcher la mise à jour d'une
ligne qui a été modifiée depuis sa sélection.
Lorsque les estampilles sont différentes, la valeur
false (0) est renvoyée. Pour plus d'informations,
reportez-vous à la section “Utilisation de
tsequal pour les mises à jour” dans le manuel
SQL Anywhere Server - Utilisation du SQL.
L'utilisation de la fonction tsequal est déconseillée.
user_id( [ nom_utilisateur ] ) Renvoie le numéro d'identification (entier) de
l'utilisateur, à ne pas confondre avec l'ID utilisateur
de SQL Anywhere.
user_name( [ id_utilisateur ] ) Renvoie l'ID de l'utilisateur
Fonctions texte et image
Les fonctions texte et image s'appliquent aux types de données texte et image. SQL Anywhere ne supporte
que la fonction texte et image textptr.
Liste des fonctions
Les fonctions texte et image suivantes sont disponibles :
♦ “TEXTPTR (fonction texte et image)”, à la page 274
Types de fonction
Copyright © 2006, iAnywhere Solutions, Inc. 107
Liste alphabétique des fonctions
Cette section fournit une liste alphabétique des fonctions, avec leur type (numérique, caractère, etc.).
F Pour obtenir la liste de toutes les fonctions d'un type donné, reportez-vous à la section “Types de
fonction”, à la page 98.
ABS (fonction numérique)
Description
Renvoie la valeur absolue d'une expression numérique.
Syntaxe
ABS( expression_numérique )
Paramètre
expression_numérique Nombre dont la valeur absolue doit être renvoyée.
Normes et compatibilité
♦ SQL/2003 Fonction principale SQL extérieure au langage SQL basique.
Exemple
L'instruction suivante renvoie le résultat 66 :
SELECT ABS( -66 );
ACOS (fonction numérique)
Description
Renvoie l'arc cosinus d'une expression numérique, exprimé en radians.
Syntaxe
ACOS( expression_numérique )
Paramètre
expression_numérique Cosinus de l'angle.
Utilisation
Cette fonction convertit son argument en DOUBLE, effectue le calcul en virgule flottante en double précision
et renvoie une valeur DOUBLE comme résultat.
Voir aussi
♦ “ASIN (fonction numérique)”, à la page 110
♦ “ATAN (fonction numérique)”, à la page 111
Fonctions SQL
108 Copyright © 2006, iAnywhere Solutions, Inc.
♦ “ATAN2 (fonction numérique)”, à la page 111
♦ “COS (fonction numérique)”, à la page 135
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie la valeur arc cosinus de 0,52.
SELECT ACOS( 0.52 );
ARGN (fonction diverse)
Description
Renvoie un argument sélectionné dans une liste d'arguments.
Syntaxe
ARGN( expression_entier, expression [ , …] )
Paramètres
expression_entier Position d'un argument dans la liste des expressions.
expression Expression de n'importe quel type de données passée dans la fonction. Les types de données
de toutes les expressions fournies doivent être identiques.
Utilisation
A partir de la valeur d'expression_entier utilisée comme nombre n, le nième argument de la liste d'arguments
restante est renvoyé (en commençant à 1). Le type de données des expressions peut être quelconque, mais
il doit être le même pour toutes les expressions. La valeur d'expression_entier doit être choisie dans la liste
des expressions, sinon la valeur NULL est renvoyée. Les expressions multiples sont séparées par une virgule.
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie le résultat 6 :
SELECT ARGN( 6, 1,2,3,4,5,6 );
ASCII (fonction de chaîne de caractères)
Description
Renvoie la valeur ASCII entière du premier octet d'expression_chaîne.
Liste alphabétique des fonctions
Copyright © 2006, iAnywhere Solutions, Inc. 109
Syntaxe
ASCII( expression_chaîne )
Paramètre
expression_chaîne Chaîne.
Utilisation
Si la chaîne est vide, la fonction renvoie zéro (0). Les chaînes de littéraux doivent être mises entre
apostrophes. Si le jeu de caractères de la base de données est codé sur plusieurs octets et si le premier caractère
de la chaîne de paramètres comporte plusieurs octets, le résultat est NULL.
Voir aussi
♦ “Fonctions de chaîne”, à la page 104
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie le résultat 90 :
SELECT ASCII( 'Z' );
ASIN (fonction numérique)
Description
Renvoie l'arc sinus d'une expression numérique, exprimé en radians.
Syntaxe
ASIN( expression_numérique )
Paramètre
expression_numérique Sinus de l'angle.
Utilisation
Les fonctions SIN et ASIN sont des opérations inverses.
Cette fonction convertit son argument en DOUBLE, effectue le calcul en virgule flottante en double précision
et renvoie une valeur DOUBLE comme résultat.
Voir aussi
♦ “ACOS (fonction numérique)”, à la page 108
♦ “ATAN (fonction numérique)”, à la page 111
♦ “ATAN2 (fonction numérique)”, à la page 111
♦ “SIN (fonction numérique)”, à la page 257
Fonctions SQL
110 Copyright © 2006, iAnywhere Solutions, Inc.
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie la valeur arc sinus de 0,52.
SELECT ASIN( 0.52 );
ATAN (fonction numérique)
Description
Renvoie l'arc tangente d'une expression numérique, exprimé en radians.
Syntaxe
ATAN( expression_numérique )
Utilisation
Les fonctions ATAN et TAN sont des opérations inverses.
Paramètre
expression_numérique Tangente de l'angle.
Utilisation
Cette fonction convertit son argument en DOUBLE, effectue le calcul en virgule flottante en double précision
et renvoie une valeur DOUBLE comme résultat.
Voir aussi
♦ “ACOS (fonction numérique)”, à la page 108
♦ “ASIN (fonction numérique)”, à la page 110
♦ “ATAN2 (fonction numérique)”, à la page 111
♦ “TAN (fonction numérique)”, à la page 274
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie la valeur arc tangente de 0,52.
SELECT ATAN( 0.52 );
ATAN2 (fonction numérique)
Description
Renvoie l'arc tangente du rapport de deux expressions numériques, exprimé en radians.
Liste alphabétique des fonctions
Copyright © 2006, iAnywhere Solutions, Inc. 111
Syntaxe
{ ATN2 | ATAN2 } ( expression_numérique1, expression_numérique2 )
Paramètres
expression_numérique1 Numérateur du rapport entre les deux expressions numériques dont l'arc
tangente est calculé.
expression_numérique2 Dénominateur du rapport entre les deux expressions numériques dont l'arc
tangente est calculé.
Utilisation
Cette fonction convertit ses arguments en DOUBLE, effectue le calcul en virgule flottante en double
précision et renvoie une valeur DOUBLE comme résultat.
Voir aussi
♦ “ACOS (fonction numérique)”, à la page 108
♦ “ASIN (fonction numérique)”, à la page 110
♦ “ATAN (fonction numérique)”, à la page 111
♦ “TAN (fonction numérique)”, à la page 274
Normes et compatibilité
♦ SQL/2003 Extension propriétaire.
Exemple
L'instruction suivante renvoie la valeur arc tangente du rapport de 0,52 à 0,60.
SELECT ATAN2( 0.52, 0.60 );
AVG (fonction d'agrégat)
Description
Pour un groupe de lignes, calcule la moyenne d'une expression numérique ou d'un ensemble de valeurs
uniques.
Syntaxe 1
AVG( expression_numérique | DISTINCT expression_numérique )
Syntaxe 2
AVG( expression_numérique ) OVER ( spécif_fenêtre )
spécif_fenêtre : reportez-vous aux instructions relatives à la syntaxe 2 dans la section Utilisation ci-dessous.
Paramètres
expression_numérique Expression dont la moyenne est calculée sur un groupe de lignes.
DISTINCT expression_numérique Calcule la moyenne des valeurs numériques uniques dans l'entrée.
Fonctions SQL
112 Copyright © 2006, iAnywhere Solutions, Inc.
Utilisation
Cette moyenne n'inclut pas les lignes pour lesquelles la valeur du paramètre expression_numérique est
NULL. Renvoie la valeur NULL pour un groupe ne contenant aucune ligne.
La syntaxe 2 représente l'utilisation de la fonction comme fonction de fenêtre dans une instruction SELECT.
Dans ce contexte, les éléments du paramètre spécif_fenêtre peuvent être spécifiés soit dans la syntaxe de la
fonction (en ligne), soit conjointement avec une clause WINDOW dans l'instruction SELECT. Pour plus
d'informations sur la manière de spécifier la fenêtre, reportez-vous à la définition de spécif_fenêtre dans la
section “Clause WINDOW”, à la page 752.
F Pour plus d'informations sur l'utilisation des fonctions de fenêtre dans les instructions SELECT (avec
des exemples concrets), reportez-vous à la section “Fonctions de fenêtre” dans le manuel SQL Anywhere
Server - Utilisation du SQL.
Voir aussi
♦ “SUM (fonction d'agrégat)”, à la page 273
♦ “COUNT (fonction d'agrégat)”, à la page 136
Normes et compatibilité
♦ SQL/2003 Fonction principale. La syntaxe 2 correspond à la fonctionnalité T611.
Exemple
L'instruction suivante renvoie le résultat 49988,623200 :
SELECT AVG( Salary ) FROM Employees ;
L'instruction suivante peut être utilisée pour déterminer la moyenne en fonction de prix uniques dans la liste
de production :
SELECT AVG( DISTINCT ListPrice ) FROM Production ;
BASE64_DECODE (fonction de chaîne de caractères)
Description
Décode des données à l'aide du format MIME base64 et renvoie la chaîne de caractères sous forme de valeur
LONG VARCHAR.
Syntaxe
BASE64_DECODE( expression_chaîne )
Paramètre
expression_chaîne La chaîne à décoder. Cette chaîne doit être codée au format base64.
Voir aussi
♦ “BASE64_ENCODE (fonction de chaîne de caractères)”, à la page 114
♦ “Fonctions de chaîne”, à la page 104
Liste alphabétique des fonctions
Copyright © 2006, iAnywhere Solutions, Inc. 113
jeudi 31 juillet 2008
Inscription à :
Articles (Atom)