Oracle
 sql >> Database >  >> RDS >> Oracle

SIGN() Funzione in Oracle

In Oracle, il SIGN() la funzione restituisce il segno del suo argomento come -1 , 0 o 1 , a seconda che l'argomento sia negativo, zero o positivo e anche a seconda che l'argomento sia di tipo NUMBER o un numero in virgola mobile.

Sintassi

La sintassi è questa:

SIGN(n)

Dove n può essere qualsiasi tipo di dati numerico o qualsiasi tipo di dati non numerico che può essere convertito in modo implicito in NUMBER e restituisce NUMBER .

Come decifrare il risultato

Il risultato effettivo dipenderà dal fatto che l'argomento sia un NUMBER tipo o un numero binario a virgola mobile (BINARY_FLOAT e BINARY_DOUBLE ).

Per il valore di NUMBER digita, il segno è:

  • -1 se n <0
  • 0 se n =0
  • 1 se n >0

Per i numeri binari a virgola mobile, il SIGN() la funzione restituisce il bit di segno del numero. Il bit di segno è:

  • -1 se n <0
  • +1 se n >=0 o n =NaN

Esempio

In questo esempio, passo un NUMBER digita:

SELECT SIGN(78.50)
FROM DUAL;

Risultato:

   SIGN(78.50) 
______________ 
             1

Ecco un altro esempio per dimostrare vari output con il NUMBER digita:

SELECT 
    SIGN(7),
    SIGN(0),
    SIGN(-7)
FROM DUAL;

Risultato:

   SIGN(7)    SIGN(0)    SIGN(-7) 
__________ __________ ___________ 
         1          0          -1

Numeri binari in virgola mobile

Ecco un esempio di cosa succede quando trasmettiamo quei numeri come numeri binari a virgola mobile:

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;

Risultato:

   7    0    -7    NaN 
____ ____ _____ ______ 
   1    1    -1      1 

Ho anche aggiunto NaN alla lista (il binary_float_nan il valore letterale a virgola mobile rappresenta un valore di tipo BINARY_FLOAT per cui la condizione IS NAN è vero).

Argomenti non numerici

Ecco cosa succede quando passiamo un argomento non numerico che non può essere convertito in un tipo di dati numerico:

SELECT SIGN('Bruce')
FROM DUAL;

Risultato:

Error starting at line : 1 in command -
SELECT SIGN('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Valori Nulli

Passaggio null restituisce null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Risultato:

   SIGN(NULL) 
_____________ 
         null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null si verifica come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Conteggio argomenti errato

Chiamando SIGN() senza passare alcun argomento restituisce un errore:

SELECT SIGN()
FROM DUAL;

Risultato:

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:

E il passaggio del numero errato di argomenti genera un errore:

SELECT SIGN(2, 3)
FROM DUAL;

Risultato:

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: