sql >> Base de Datos >  >> RDS >> Oracle

Función SIGN() en Oracle

En Oracle, el SIGN() la función devuelve el signo de su argumento como -1 , 0 , o 1 , dependiendo de si el argumento es negativo, cero o positivo, y también dependiendo de si el argumento es de tipo NUMBER o un número de coma flotante.

Sintaxis

La sintaxis es así:

SIGN(n)

Donde n puede ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a NUMBER y devuelve NUMBER .

Cómo descifrar el resultado

El resultado real dependerá de si el argumento es un NUMBER tipo, o un número de punto flotante binario (BINARY_FLOAT y BINARY_DOUBLE ).

Por valor de NUMBER tipo, el signo es:

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

Para números binarios de punto flotante, el SIGN() La función devuelve el bit de signo del número. El bit de signo es:

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

Ejemplo

En este ejemplo, paso un NUMBER tipo:

SELECT SIGN(78.50)
FROM DUAL;

Resultado:

   SIGN(78.50) 
______________ 
             1

Aquí hay otro ejemplo para demostrar varias salidas con el NUMBER tipo:

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

Resultado:

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

Números binarios de punto flotante

Aquí hay un ejemplo de lo que sucede cuando convertimos esos números como números binarios de punto flotante:

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 

También agregué NaN a la lista (el binary_float_nan el literal de coma flotante representa un valor de tipo BINARY_FLOAT para el cual la condición IS NAN es cierto).

Argumentos no numéricos

Esto es lo que sucede cuando pasamos un argumento no numérico que no se puede convertir a un tipo de datos 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

Pasando null devuelve null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Resultado:

   SIGN(NULL) 
_____________ 
         null

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Recuento de argumentos incorrecto

Llamando a SIGN() sin pasar ningún argumento devuelve un error:

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:

Y pasar el número incorrecto de argumentos da como resultado un error:

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: