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 on
=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: