In Oracle das SIGN()
Die Funktion gibt das Vorzeichen ihres Arguments als -1
zurück , 0
, oder 1
, abhängig davon, ob das Argument negativ, null oder positiv ist, und auch abhängig davon, ob das Argument vom Typ NUMBER
ist oder eine Fließkommazahl.
Syntax
Die Syntax lautet wie folgt:
SIGN(n)
Wobei n
kann ein beliebiger numerischer Datentyp oder ein beliebiger nicht numerischer Datentyp sein, der implizit in NUMBER
konvertiert werden kann , und gibt NUMBER
zurück .
Wie man das Ergebnis entschlüsselt
Das tatsächliche Ergebnis hängt davon ab, ob das Argument eine NUMBER
ist Typ oder eine binäre Gleitkommazahl (BINARY_FLOAT
und BINARY_DOUBLE
).
Für den Wert NUMBER
Typ, das Zeichen ist:
- -1 wenn
n
<0 - 0 wenn
n
=0 - 1 wenn
n
>0
Für binäre Gleitkommazahlen das SIGN()
Die Funktion gibt das Vorzeichenbit der Zahl zurück. Das Vorzeichenbit ist:
- -1 wenn
n
<0 - +1 wenn
n
>=0 odern
=NaN
Beispiel
In diesem Beispiel übergebe ich eine NUMBER
Typ:
SELECT SIGN(78.50)
FROM DUAL;
Ergebnis:
SIGN(78.50) ______________ 1
Hier ist ein weiteres Beispiel, um verschiedene Ausgaben mit NUMBER
zu demonstrieren Typ:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Ergebnis:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Binäre Gleitkommazahlen
Hier ist ein Beispiel dafür, was passiert, wenn wir diese Zahlen als binäre Gleitkommazahlen umwandeln:
SELECT
SIGN(CAST(7 AS BINARY_FLOAT)) AS "7",
SIGN(CAST(0 AS BINARY_FLOAT)) AS "0",
SIGN(CAST(-7 AS BINARY_FLOAT)) AS "-7",
SIGN(binary_float_nan) AS "NaN"
FROM DUAL;
Ergebnis:
7 0 -7 NaN ____ ____ _____ ______ 1 1 -1 1
Ich habe auch NaN
hinzugefügt in die Liste (die binary_float_nan
Gleitkommaliteral repräsentiert einen Wert vom Typ BINARY_FLOAT
für die die Bedingung IS
NAN
ist wahr).
Nicht numerische Argumente
Folgendes passiert, wenn wir ein nicht numerisches Argument übergeben, das nicht in einen numerischen Datentyp konvertiert werden kann:
SELECT SIGN('Bruce')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Nullwerte
Übergabe von null
gibt null
zurück :
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Ergebnis:
SIGN(NULL) _____________ null
Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null
tritt als Ergebnis eines SQL SELECT
auf Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Falsche Argumentanzahl
Aufruf von SIGN()
ohne Übergabe von Argumenten gibt einen Fehler zurück:
SELECT SIGN()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT SIGN() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
Und das Übergeben der falschen Anzahl von Argumenten führt zu einem Fehler:
SELECT SIGN(2, 3)
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT SIGN(2, 3) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: