I Oracle, SIGN()
funktion returnerar tecknet för dess argument som -1
, 0
eller 1
, beroende på om argumentet är negativt, noll eller positivt, och även beroende på om argumentet är av typen NUMBER
eller ett flyttal.
Syntax
Syntaxen ser ut så här:
SIGN(n)
Där n
kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till NUMBER
, och returnerar NUMBER
.
Hur man dechiffrerar resultatet
Det faktiska resultatet kommer att bero på om argumentet är ett NUMBER
typ, eller ett binärt flyttalstal (BINARY_FLOAT
och BINARY_DOUBLE
).
För värdet NUMBER
typ, tecknet är:
- -1 om
n
<0 - 0 om
n
=0 - 1 om
n
>0
För binära flyttal, SIGN()
funktion returnerar teckenbiten för talet. Teckenbiten är:
- -1 om
n
<0 - +1 om
n
>=0 ellern
=NaN
Exempel
I det här exemplet skickar jag ett NUMBER
typ:
SELECT SIGN(78.50)
FROM DUAL;
Resultat:
SIGN(78.50) ______________ 1
Här är ett annat exempel för att demonstrera olika utgångar med NUMBER
typ:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Resultat:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Binära flyttalstal
Här är ett exempel på vad som händer när vi kastar dessa tal som binära flyttal:
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
Jag lade också till NaN
till listan (binary_float_nan
flyttalsliteral representerar ett värde av typen BINARY_FLOAT
för vilket villkoret IS
NAN
är sant).
Icke-numeriska argument
Så här händer när vi skickar ett icke-numeriskt argument som inte kan konverteras till en numerisk datatyp:
SELECT SIGN('Bruce')
FROM DUAL;
Resultat:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Nullvärden
Skickar null
returnerar null
:
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Resultat:
SIGN(NULL) _____________ null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Inkorrekt antal argument
Anropar SIGN()
utan att skicka några argument returnerar ett fel:
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:
Och att skicka fel antal argument resulterar i ett fel:
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: