Les opérateurs permettent de comparer des valeurs, d'effectuer des calculs, de manipuler des chaînes, de traiter des données binaires et de combiner des conditions logiques dans les instructions MaxCompute SQL.
Vue d'ensemble
MaxCompute prend en charge les types d'opérateurs suivants :
|
Type d'opérateur |
Description |
|
Compare des valeurs et renvoie un résultat BOOLEAN. |
|
|
Concatène des chaînes. |
|
|
Effectue des calculs mathématiques. |
|
|
Effectue des opérations sur les représentations binaires des entiers. |
|
|
Combine plusieurs conditions. Généralement utilisé avec des expressions BOOLEAN. |
Opérateurs relationnels
Les opérateurs relationnels comparent deux valeurs et renvoient TRUE, FALSE ou NULL. Sauf indication contraire, si l'un des opérandes est NULL, le résultat est NULL.
|
Opérateur |
Description |
|
|
Renvoie TRUE si A est égal à B. Renvoie NULL si A ou B est NULL. |
|
|
Égalité sécurisée pour NULL. Renvoie TRUE si A et B sont tous deux NULL. Renvoie FALSE si un seul est NULL. Sinon, renvoie TRUE si A est égal à B, ou FALSE dans le cas contraire. |
|
|
Renvoie TRUE si A n'est pas égal à B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie TRUE si A est inférieur à B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie TRUE si A est inférieur ou égal à B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie TRUE si A est supérieur à B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie TRUE si A est supérieur ou égal à B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie TRUE si A est NULL. Sinon, renvoie FALSE. |
|
|
Renvoie TRUE si A n'est pas NULL. Sinon, renvoie FALSE. |
|
|
Correspondance de motif. Renvoie TRUE si la chaîne A correspond au motif B. Renvoie NULL si A ou B est NULL. Le caractère générique |
|
|
Correspondance d'expression régulière. Renvoie TRUE si la chaîne A correspond à l'expression régulière B. Renvoie NULL si A ou B est NULL. Renvoie une erreur si B est une chaîne vide. |
|
|
Renvoie TRUE si A se trouve dans l'ensemble B. Renvoie NULL si A est NULL. L'ensemble B doit être un ensemble constant contenant au moins un élément, et tous les éléments doivent être du même type de données. |
|
|
Renvoie TRUE si A est supérieur ou égal à B et inférieur ou égal à C (ou l'inverse avec NOT). Renvoie NULL si A, B ou C est NULL. |
|
|
Compare deux valeurs en traitant les valeurs NULL comme égales. |
Exemples de motifs LIKE
'aaa' LIKE 'a__' -- TRUE (underscore matches one character)
'aaa' LIKE 'a%' -- TRUE (percent matches zero or more characters)
'aaa' LIKE 'aab' -- FALSE
'a%b' LIKE 'a\\%b' -- TRUE (escaped percent matches literal %)
'axb' LIKE 'a\\%b' -- FALSE
Exemples d'utilisation
SELECT * FROM user WHERE user_id = '0001';
SELECT * FROM user WHERE user_name <> 'maggie';
SELECT * FROM user WHERE age > '50';
SELECT * FROM user WHERE birth_day >= '1980-01-01 00:00:00';
SELECT * FROM user WHERE is_female IS NULL;
SELECT * FROM user WHERE is_female IS NOT NULL;
SELECT * FROM user WHERE user_id IN (0001, 0010);
SELECT * FROM user WHERE user_name LIKE 'M%';
Notes importantes
Des types incompatibles peuvent renvoyer NULL lors des comparaisons. Convertissez les opérandes en types compatibles avant de les comparer. Conversion de type de données.
Comparaison de valeurs DOUBLE
Ne comparez pas directement les valeurs DOUBLE avec = en raison de la précision limitée. Vérifiez plutôt si la différence absolue est inférieure à un seuil :
ABS(0.9999999999 - 1.0000000000) < 0.000000001
-- 0.9999999999 and 1.0000000000 have a precision of 10 decimal digits,
-- whereas 0.000000001 has a precision of 9 decimal digits.
-- 0.9999999999 is considered to be equal to 1.0000000000.
ABS est une fonction intégrée qui renvoie la valeur absolue de son entrée.
Une valeur DOUBLE dans MaxCompute offre généralement une précision de 14 chiffres décimaux.
Comparaison de valeurs STRING et BIGINT
La comparaison d'une valeur STRING avec une valeur BIGINT convertit implicitement les deux en DOUBLE, ce qui peut entraîner une perte de précision. Utilisez CAST(string_value AS BIGINT) pour convertir d'abord la valeur STRING en BIGINT.
Opérateurs de chaîne
|
Opérateur |
Description |
|
|
Concatène les chaînes A et B. Par exemple, |
Exemple
SELECT first_name || ' ' || last_name AS full_name FROM employees;
Opérateurs arithmétiques
Les opérateurs arithmétiques effectuent des calculs mathématiques sur des valeurs numériques.
|
Opérateur |
Description |
|
|
Renvoie la somme de A et B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie la différence entre A et B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie le produit de A par B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie le quotient de A divisé par B. Renvoie NULL si A ou B est NULL. Si A et B sont tous deux de type BIGINT, le résultat est de type DOUBLE. |
|
|
Renvoie le reste de la division de A par B. Renvoie NULL si A ou B est NULL. |
|
|
Renvoie A (plus unaire). |
|
|
Renvoie l'opposé de A. Renvoie NULL si A est NULL. |
|
|
Effectue la division entière de A par B, en ignorant la partie fractionnaire. Renvoie NULL si A ou B est NULL. |
Exemple
SELECT age + 10, age - 10, age % 10, -age, age * age, age / 10, age DIV 10 FROM user;
Règles de type de données
Seuls les opérandes STRING, BIGINT, DOUBLE et TIMESTAMP_NTZ prennent en charge les opérations arithmétiques. Les valeurs Date et BOOLEAN ne sont pas prises en charge. Types de données MaxCompute TIMESTAMP_NTZ.
Les opérandes STRING sont implicitement convertis en DOUBLE avant le calcul.
Lorsque des opérandes BIGINT et DOUBLE sont mélangés, la valeur BIGINT est implicitement convertie en DOUBLE et le résultat est DOUBLE.
Si A et B sont tous deux de type BIGINT,
A / Brenvoie DOUBLE. Toutes les autres opérations arithmétiques sur deux opérandes BIGINT renvoient BIGINT.
Opérateurs binaires
Les opérateurs binaires travaillent sur la représentation binaire des entiers. Les deux opérandes doivent être de type BIGINT. Aucune conversion de type implicite ne s'applique.
|
Opérateur |
Syntaxe |
Description |
|
|
|
Renvoie le ET binaire de A et B. Par exemple, |
|
|
|
Renvoie le OU binaire de A et B. Par exemple, |
|
|
|
Renvoie le NON binaire de A. Par exemple, |
|
|
|
Renvoie le OU exclusif binaire de A et B. Par exemple, |
Opérateurs logiques
Les opérateurs logiques combinent des expressions BOOLEAN. Seuls les opérandes BOOLEAN sont pris en charge ; aucune conversion de type implicite ne s'applique.
Les tables de vérité suivantes affichent les résultats pour toutes les combinaisons de TRUE, FALSE et NULL :
AND
|
A |
B |
A AND B |
|
TRUE |
TRUE |
TRUE |
|
TRUE |
FALSE |
FALSE |
|
FALSE |
TRUE |
FALSE |
|
FALSE |
FALSE |
FALSE |
|
FALSE |
NULL |
FALSE |
|
NULL |
FALSE |
FALSE |
|
TRUE |
NULL |
NULL |
|
NULL |
TRUE |
NULL |
|
NULL |
NULL |
NULL |
OR
|
A |
B |
A OR B |
|
TRUE |
TRUE |
TRUE |
|
TRUE |
FALSE |
TRUE |
|
FALSE |
TRUE |
TRUE |
|
FALSE |
FALSE |
FALSE |
|
FALSE |
NULL |
NULL |
|
NULL |
FALSE |
NULL |
|
TRUE |
NULL |
TRUE |
|
NULL |
TRUE |
TRUE |
|
NULL |
NULL |
NULL |
NOT
|
A |
NOT A |
|
TRUE |
FALSE |
|
FALSE |
TRUE |
|
NULL |
NULL |
Priorité des opérateurs
Lorsqu'une expression contient plusieurs opérateurs, MaxCompute les évalue dans l'ordre suivant. Les numéros les plus bas ont la priorité la plus élevée. Les opérateurs de même niveau sont évalués de gauche à droite.
|
Priorité |
Opérateurs |
|
1 (la plus élevée) |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|| |
|
6 |
& |
|
7 |
| |
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 (la plus basse) |
|
Utilisez des parenthèses pour remplacer la priorité par défaut. Par exemple :
a = 1 AND b = 1 OR c = 1 -- Evaluates AND first, then OR.
a = 1 AND (b = 1 OR c = 1) -- Evaluates OR first (inside parentheses), then AND.