Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SIGN()-Funktion in Oracle

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 oder n =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: