NVL- und COALESCE-Funktionen - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

NVL- und COALESCE-Funktionen

Gibt den Wert des ersten Ausdrucks in einer Reihe von Ausdrücken zurück, der nicht null ist. Wenn ein Nicht-Null-Wert gefunden wird, werden die verbleibenden Ausdrücke in der Liste nicht ausgewertet.

NVL ist identisch mit COALESCE. Es sind Synonyme. Unter diesem Thema finden Sie eine Erläuterung der Syntax sowie Beispiele für beide.

Syntax

NVL( expression, expression, ... )

Die Syntax für COALESCE ist identisch:

COALESCE( expression, expression, ... )

Wenn alle Ausdrücke null sind, ist das Ergebnis null.

Diese Funktionen sind hilfreich, wenn Sie einen Sekundärwert zurückgeben möchten, falls ein Primärwert fehlt oder null ist. Eine Abfrage könnte beispielsweise die erste von drei verfügbaren Telefonnummern zurückgeben: Mobiltelefonnummer, private oder geschäftliche Telefonnummer. Die Reihenfolge der Ausdrücke in der Funktion bestimmt die Reihenfolge der Auswertung.

Argumente

expression

Ein Ausdruck (beispielsweise ein Spaltenname), der hinsichtlich des Null-Status ausgewertet werden soll.

Rückgabetyp

Amazon Redshift bestimmt den Datentyp des zurückgegebenen Werts anhand der Eingabeausdrücke. Wenn die Datentypen der Eingabeausdrücke keinen gemeinsamen Typ haben, wird ein Fehler zurückgegeben.

Beispiele

Wenn die Liste Ausdrücke mit Ganzzahlen enthält, gibt die Funktion eine Ganzzahl zurück.

SELECT COALESCE(NULL, 12, NULL); coalesce -------------- 12

Dieses Beispiel, das im Gegensatz zum vorherigen Beispiel NVL verwendet, gibt dasselbe Ergebnis zurück.

SELECT NVL(NULL, 12, NULL); coalesce -------------- 12

Im folgenden Beispiel wird einen Zeichenfolgetyp zurückgegeben.

SELECT COALESCE(NULL, 'Amazon Redshift', NULL); coalesce -------------- Amazon Redshift

Das folgende Beispiel führt zu einem Fehler, da die Datentypen in der Ausdrucksliste unterschiedlich sind. In diesem Fall enthält die Liste sowohl einen Zeichenfolgetyp als auch einen Zahlentyp.

SELECT COALESCE(NULL, 'Amazon Redshift', 12); ERROR: invalid input syntax for integer: "Amazon Redshift"

Für dieses Beispiel erstellen Sie eine Tabelle mit den Spalten START_DATE und END_DATE, fügen Zeilen ein, die Null-Werte enthalten, und wenden anschließend einen NVL-Ausdruck auf die beiden Spalten an.

create table datetable (start_date date, end_date date); insert into datetable values ('2008-06-01','2008-12-31'); insert into datetable values (null,'2008-12-31'); insert into datetable values ('2008-12-31',null);
select nvl(start_date, end_date) from datetable order by 1; coalesce ------------ 2008-06-01 2008-12-31 2008-12-31

Der Standardspaltenname für einen NVL-Ausdruck ist COALESCE. Die folgende Abfrage gibt dieselben Ergebnisse zurück:

select coalesce(start_date, end_date) from datetable order by 1;

Für die folgenden Beispielabfragen erstellen Sie eine Tabelle mit Beispielinformationen für Hotelbuchungen und fügen mehrere Zeilen ein. Einige Datensätze enthalten Nullwerte.

create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));

Fügen Sie die folgenden Beispieldaten ein. Manche Datensätze weisen unter check_out kein Datum und unter funds_collected keinen Betrag auf.

insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00); insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00); insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00); insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00); insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null); insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);

Die folgende Abfrage gibt eine Liste von Daten zurück. Wenn das check_out-Datum nicht verfügbar ist, wird das check_in-Datum aufgeführt.

select coalesce(check_out, check_in) from booking_info order by booking_id;

Die Ergebnisse sehen wie folgt aus. Beachten Sie, dass die letzten beiden Datensätze das check_in-Datum anzeigen.

coalesce ------------ 2023-02-03 2023-04-26 2023-03-16 2023-06-03 2023-07-10 2023-08-15

Wenn Sie erwarten, dass eine Abfrage für bestimmte Funktionen oder Spalten Null-Werte zurückgibt, können Sie einen NVL-Ausdruck verwenden, um die Null-Werte mit einem anderen Wert zu ersetzen. Beispielsweise geben Aggregationsfunktionen wie SUM Null-Werte anstelle von Nullen zurück, wenn es keine Zeilen gibt, die ausgewertet werden können. Sie können einen NVL-Ausdruck verwenden, um diese Null-Werte durch 700.0 zu ersetzen. Anstelle von 485 lautet das Ergebnis der Addition der Werte unter funds_collected 1885, da zwei Zeilen, die den Wert null aufweisen, durch 700 ersetzt wurden.

select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info; sumresult ------ 1885