No Oracle, o
SIGN()
função retorna o sinal de seu argumento como -1
, 0
, ou 1
, dependendo se o argumento é negativo, zero ou positivo, e também dependendo se o argumento é do tipo NUMBER
ou um número de ponto flutuante. Sintaxe
A sintaxe fica assim:
SIGN(n)
Onde
n
pode ser qualquer tipo de dado numérico ou qualquer tipo de dado não numérico que possa ser convertido implicitamente em NUMBER
, e retorna NUMBER
. Como decifrar o resultado
O resultado real dependerá se o argumento é um
NUMBER
tipo, ou um número binário de ponto flutuante (BINARY_FLOAT
e BINARY_DOUBLE
). Para o valor de
NUMBER
tipo, o sinal é:- -1 se
n
<0 - 0 se
n
=0 - 1 se
n
>0
Para números binários de ponto flutuante, o
SIGN()
A função retorna o bit de sinal do número. O bit de sinal é:- -1 se
n
<0 - +1 se
n
>=0 oun
=NaN
Exemplo
Neste exemplo, passo um
NUMBER
tipo:SELECT SIGN(78.50)
FROM DUAL;
Resultado:
SIGN(78.50) ______________ 1
Aqui está outro exemplo para demonstrar várias saídas com o
NUMBER
tipo:SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Resultado:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Números binários de ponto flutuante
Aqui está um exemplo do que acontece quando convertemos esses números como números binários de ponto flutuante:
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;
Resultado:
7 0 -7 NaN ____ ____ _____ ______ 1 1 -1 1
Eu também adicionei
NaN
à lista (o binary_float_nan
literal de ponto flutuante representa um valor do tipo BINARY_FLOAT
para a qual a condição IS
NAN
é verdade). Argumentos não numéricos
Aqui está o que acontece quando passamos um argumento não numérico que não pode ser convertido em um tipo de dados numérico:
SELECT SIGN('Bruce')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Valores nulos
Passando
null
retorna null
:SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Resultado:
SIGN(NULL) _____________ null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Contagem incorreta de argumentos
Chamando
SIGN()
sem passar nenhum argumento retorna um erro:SELECT SIGN()
FROM DUAL;
Resultado:
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 passar o número errado de argumentos resulta em um erro:
SELECT SIGN(2, 3)
FROM DUAL;
Resultado:
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: