I Oracle er SIGN()
funktion returnerer tegnet af sit argument som -1
, 0
eller 1
, afhængigt af om argumentet er negativt, nul eller positivt, og også afhængigt af om argumentet er af typen NUMBER
eller et flydende kommatal.
Syntaks
Syntaksen ser sådan ud:
SIGN(n)
Hvor n
kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til NUMBER
, og returnerer NUMBER
.
Sådan tyder du resultatet
Det faktiske resultat vil afhænge af, om argumentet er et NUMBER
type eller et binært flydende decimaltal (BINARY_FLOAT
og BINARY_DOUBLE
).
For værdien NUMBER
type, tegnet er:
- -1 hvis
n
<0 - 0 hvis
n
=0 - 1 hvis
n
>0
For binære flydende kommatal er SIGN()
funktion returnerer fortegnsbitten af tallet. Tegnbitten er:
- -1 hvis
n
<0 - +1 hvis
n
>=0 ellern
=NaN
Eksempel
I dette eksempel sender jeg en NUMBER
type:
SELECT SIGN(78.50)
FROM DUAL;
Resultat:
SIGN(78.50) ______________ 1
Her er et andet eksempel til at demonstrere forskellige output med NUMBER
type:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Resultat:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Binære floating-point-tal
Her er et eksempel på, hvad der sker, når vi kaster disse tal som binære flydende kommatal:
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;
Resultat:
7 0 -7 NaN ____ ____ _____ ______ 1 1 -1 1
Jeg tilføjede også NaN
til listen (binary_float_nan
floating-point literal repræsenterer en værdi af typen BINARY_FLOAT
for hvilken betingelsen IS
NAN
er sandt).
Ikke-numeriske argumenter
Her er, hvad der sker, når vi sender et ikke-numerisk argument, der ikke kan konverteres til en numerisk datatype:
SELECT SIGN('Bruce')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Nul-værdier
Sender null
returnerer null
:
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Resultat:
SIGN(NULL) _____________ null
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Forkert antal argumenter
Kalder SIGN()
uden at sende nogen argumenter returnerer en fejl:
SELECT SIGN()
FROM DUAL;
Resultat:
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:
Og at sende det forkerte antal argumenter resulterer i en fejl:
SELECT SIGN(2, 3)
FROM DUAL;
Resultat:
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: