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: