Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função SIGN() no Oracle


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