Zum Inhalt springen

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 typeof oder 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 y wird x als untere und y als obere Grenze verwendet. Wenn daher x > y gilt, ist das Ergebnis immer false.