Vergleiche
Vergleichsoperatoren
Die folgende Tabelle zeigt die Standardvergleichsoperatoren.
Wenn eines der Eingabeargumente NULL ist, ist das Ergebnis des Vergleichs NULL.
| Operator | Beschreibung | Beispiel | Ergebnis |
|---|---|---|---|
< |
kleiner als | 2 < 3 |
true |
> |
größer als | 2 > 3 |
false |
<= |
kleiner oder gleich | 2 <= 3 |
true |
>= |
größer oder gleich | 4 >= NULL |
NULL |
= oder == |
gleich | NULL = NULL |
NULL |
<> oder != |
ungleich | 2 <> 2 |
false |
Die folgende Tabelle zeigt die Standardunterscheidungsoperatoren.
Diese Operatoren behandeln NULL-Werte als gleich.
| Operator | Beschreibung | Beispiel | Ergebnis |
|---|---|---|---|
IS DISTINCT FROM |
ungleich, einschließlich NULL |
2 IS DISTINCT FROM NULL |
true |
IS NOT DISTINCT FROM |
gleich, einschließlich NULL |
NULL IS NOT DISTINCT FROM NULL |
true |
Kombinierte Typumwandlung
Beim Vergleich unterschiedlicher Typen führt DuckDB eine kombinierte Typumwandlung durch.
Diese Umwandlungen wurden eingeführt, um interaktive Abfragen bequemer zu machen, und entsprechen den Umwandlungen mehrerer Programmiersprachen, sind aber oft nicht mit dem Verhalten von PostgreSQL kompatibel. Die folgenden Ausdrücke werden in DuckDB beispielsweise ausgewertet und liefern true, scheitern in PostgreSQL jedoch.
SELECT 1 = true;SELECT 1 = '1.1';Eine strengere Typprüfung für DuckDBs Vergleichsoperatoren lässt sich nicht erzwingen. Wenn Sie eine strengere Typprüfung benötigen, erwägen Sie ein Makro mit der Funktion
typeofoder die Implementierung einer benutzerdefinierten Funktion.
BETWEEN und IS [NOT] NULL
Neben den Standardvergleichsoperatoren gibt es auch die Operatoren BETWEEN und IS (NOT) NULL. Sie verhalten sich weitgehend wie Operatoren, haben aber eine vom SQL-Standard vorgeschriebene besondere Syntax. Sie sind in der folgenden Tabelle dargestellt.
Beachten Sie, dass BETWEEN und NOT BETWEEN nur in den Fällen den Beispielen unten entsprechen, in denen a, x und y denselben Typ haben, weil BETWEEN alle Eingaben in denselben Typ umwandelt.
| Prädikat | Beschreibung |
|---|---|
a BETWEEN x AND y |
gleichwertig mit x <= a AND a <= y |
a NOT BETWEEN x AND y |
gleichwertig mit x > a OR a > y |
expression IS NULL |
true, wenn der Ausdruck NULL ist, sonst false |
expression ISNULL |
Alias für IS NULL (nicht standardisiert) |
expression IS NOT NULL |
false, wenn der Ausdruck NULL ist, sonst true |
expression NOTNULL |
Alias für IS NOT NULL (nicht standardisiert) |
Eine explizite Kollation auf einer beliebigen Eingabe von BETWEEN gilt für den gesamten BETWEEN-Ausdruck. Das kann sich vom getrennten Schreiben der Vergleiche unterscheiden, bei dem die explizite Kollation nur für den Vergleich gilt, der sie enthält:
SELECT 'B' NOT BETWEEN ('A' COLLATE NOCASE) AND 'a' AS between_result, 'B' < ('A' COLLATE NOCASE) OR 'B'> 'a' AS separate_result;| between_result | separate_result |
|---|---|
| true | false |
Beim Ausdruck
BETWEEN x AND ywirdxals untere undyals obere Grenze verwendet. Wenn daherx > ygilt, ist das Ergebnis immerfalse.