Inhaltsverzeichnis

Search

  1. Vorwort
  2. Umwandlungssprache
  3. Konstanten
  4. Operatoren
  5. Variablen
  6. Datumsangaben
  7. Funktionen

Referenzhandbuch für die Umwandlungssprache

Referenzhandbuch für die Umwandlungssprache

IIF

IIF

Gibt einen von zwei angegebenen Werten zurück, abhängig vom Ergebnis einer Bedingung.

Syntax

IIF(
condition
,
value1
[,
value2
] )
In der folgenden Tabelle werden die Argumente für diesen Befehl beschrieben:
Argument
Erforderlich/
Optional
Beschreibung
condition
Erforderlich
Die Bedingung, die ausgewertet werden soll. Sie können jeden beliebigen Umwandlungsausdruck eingeben, dessen Auswertung TRUE oder FALSE ergibt.
value1
Erforderlich
Alle Datentypen außer binär. Der Wert, der zurückgegeben werden soll, wenn die Bedingung TRUE ist. Der Rückgabewert weist immer den von diesem Argument angegebenen Datentyp auf. Sie können einen beliebigen gültigen Umwandlungsausdruck eingeben, einschließlich eines weiteren IIF-Ausdrucks.
value2
optional
Alle Datentypen außer binär. Der Wert, der zurückgegeben werden soll, wenn die Bedingung FALSE ist. Sie können einen beliebigen gültigen Umwandlungsausdruck eingeben, einschließlich eines weiteren IIF-Ausdrucks.
Im Unterschied zu konditionalen Funktionen in manchen Systemen ist die Bedingung FALSE (
value2
) in der IIF-Funktion nicht erforderlich. Wenn Sie
value2
nicht angeben, gibt die Funktion bei FALSE Folgendes zurück:
  • 0, wenn
    value1
    ein numerischer Datentyp ist.
  • Leerer String, wenn
    value1
    ein String-Datentyp ist.
  • NULL, wenn
    value1
    ein Datum/Zeit-Datentyp ist.
Beispiel: Der folgende Ausdruck enthält keine FALSE-Bedingung und
value1
weist einen Zeichenfolgendatentyp auf; daher gibt der
Data Integration Service
eine leere Zeichenfolge für jede Zeile zurück, die mit FALSE ausgewertet wird:
IIF( SALES > 100, EMP_NAME )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
''
(empty string)
120
Sally Green
Sally Green
NULL
Greg Jones
''
(empty string)

Rückgabewert

value1
, wenn die Bedingung TRUE lautet.
value2
, wenn die Bedingung FALSE lautet.
Beispiel: Der folgende Ausdruck enthält die FALSE-Bedingung NULL; daher gibt der
Data Integration Service
NULL für jede Zeile zurück, die mit FALSE ausgewertet wird:
IIF( SALES > 100, EMP_NAME, NULL )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
NULL
120
Sally Green
Sally Green
NULL
Greg Jones
NULL
Wenn die Daten Multibyte-Zeichen enthalten und das Bedingungsargument Zeichenfolgendaten vergleicht, hängt der Rückgabewert von der Codepage und dem Datenverschiebungsmodus des
Data Integration Service
ab.

IIF und Datentypen

Bei IIF ist der Datentyp des Rückgabewerts der gleiche wie der Datentyp des Ergebnisses mit der höchsten Präzision.
Beispiel: Sie haben folgenden Ausdruck formuliert:
IIF( SALES < 100, 1, .3333 )
Die Ergebnis für TRUE (1) ist eine Ganzzahl und jenes für FALSE (.3333) eine Dezimalzahl. Der Dezimaldatentyp weist die höhere Präzision als die Ganzzahl auf, sodass der Datentyp des Rückgabewerts immer eine Dezimalzahl ist.
Wenn bei Mappings im hohen Präzisionsmodus mindestens ein Ergebnis einen Double-Wert liefert, ist auch der Datentyp des Rückgabewerts Double.

IIF und komplexe Datentypen

Sie können IIF verwenden, um ein Array oder eine Struktur oder Elemente aus dem Array oder der Struktur zurückzugeben.
Sie verfügen beispielsweise über folgendes Array:
names = ['John', 'Kevin', 'Laura']
Sie können den folgenden Ausdruck verwenden, um einen der Werte im Array zurückzugeben:
IIF( SIZE(names) > 2, names[2], names[0] )
RETURN VALUE
: 'Laura'

Besondere Verwendungszwecke von IIF

Mit verschachtelten IIF-Anweisungen können Sie mehrere Bedingungen testen. Das folgende Beispiel testet verschiedene Bedingungen und gibt 0 zurück, wenn der Umsatz 0 oder negativ ist:
IIF( SALES > 0, IIF( SALES < 50, SALARY1, IIF( SALES < 100, SALARY2, IIF( SALES < 200, SALARY3, BONUS))), 0 )
Mithilfe von Kommentaren können Sie diesen logischen Ausdruck leichter lesbar machen:
IIF( SALES > 0, --then test to see if sales is between 1 and 49:   IIF( SALES < 50,    --then return SALARY1       SALARY1,       --else test to see if sales is between 50 and 99:          IIF( SALES < 100,           --then return              SALARY2,              --else test to see if sales is between 100 and 199:                 IIF( SALES < 200,                 --then return                    SALARY3,                   --else for sales over 199, return                      BONUS)               )            ), --else for sales less than or equal to zero, return       0)
Verwenden Sie IIF in Update-Strategien. Beispiel:
IIF( ISNULL( ITEM_NAME ), DD_REJECT, DD_INSERT)

Alternative zu IIF

In vielen Fällen können Sie statt IIF DECODE verwenden. DECODE kann die Lesbarkeit verbessern. Im Folgenden sehen Sie die Verwendung von DECODE anstelle von IIF anhand des ersten Beispiels aus dem vorherigen Abschnitt:
DECODE( TRUE,    SALES > 0 and SALES < 50, SALARY1,    SALES > 49 AND SALES < 100, SALARY2,    SALES > 99 AND SALES < 200, SALARY3,    SALES > 199, BONUS)
Häufig können Sie mit einer Filterumwandlung anstelle von IIF die Leistung maximieren.