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: