V Oracle, SIGN()
funkce vrací znaménko svého argumentu jako -1
, 0
, nebo 1
, v závislosti na tom, zda je argument záporný, nulový nebo kladný, a také v závislosti na tom, zda je argument typu NUMBER
nebo číslo s plovoucí desetinnou čárkou.
Syntaxe
Syntaxe vypadá takto:
SIGN(n)
Kde n
může být jakýkoli číselný datový typ nebo jakýkoli nečíselný datový typ, který lze implicitně převést na NUMBER
a vrátí NUMBER
.
Jak dešifrovat výsledek
Skutečný výsledek bude záviset na tom, zda je argument NUMBER
typ nebo binární číslo s pohyblivou řádovou čárkou (BINARY_FLOAT
a BINARY_DOUBLE
).
Pro hodnotu NUMBER
typu, znak je:
- -1, pokud
n
<0 - 0, pokud
n
=0 - 1, pokud
n
>0
Pro binární čísla s pohyblivou řádovou čárkou SIGN()
funkce vrací znaménkový bit čísla. Znaménkový bit je:
- -1, pokud
n
<0 - +1, pokud
n
>=0 nebon
=NaN
Příklad
V tomto příkladu předám NUMBER
typ:
SELECT SIGN(78.50)
FROM DUAL;
Výsledek:
SIGN(78.50) ______________ 1
Zde je další příklad demonstrující různé výstupy s NUMBER
typ:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Výsledek:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Binární čísla s plovoucí desetinnou čárkou
Zde je příklad toho, co se stane, když tato čísla přetypujeme jako binární čísla s plovoucí desetinnou čárkou:
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;
Výsledek:
7 0 -7 NaN ____ ____ _____ ______ 1 1 -1 1
Také jsem přidal NaN
do seznamu (binary_float_nan
literál s plovoucí desetinnou čárkou představuje hodnotu typu BINARY_FLOAT
pro kterou podmínka IS
NAN
je pravda).
Nečíselné argumenty
Co se stane, když předáme nečíselný argument, který nelze převést na číselný datový typ:
SELECT SIGN('Bruce')
FROM DUAL;
Výsledek:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Nulové hodnoty
Předávání null
vrátí null
:
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Výsledek:
SIGN(NULL) _____________ null
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Nesprávný počet argumentů
Volání SIGN()
bez předání jakýchkoli argumentů vrátí chybu:
SELECT SIGN()
FROM DUAL;
Výsledek:
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:
A předání nesprávného počtu argumentů má za následek chybu:
SELECT SIGN(2, 3)
FROM DUAL;
Výsledek:
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: