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: