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