В Oracle, SIGN()
функцията връща знака на своя аргумент като -1
, 0
, или 1
, в зависимост от това дали аргументът е отрицателен, нулев или положителен, както и в зависимост от това дали аргументът е от тип NUMBER
или число с плаваща запетая.
Синтаксис
Синтаксисът е така:
SIGN(n)
Където n
може да бъде всеки числов тип данни или всеки нечисловен тип данни, който може да бъде имплицитно преобразуван в NUMBER
и връща NUMBER
.
Как да дешифрирам резултата
Действителният резултат ще зависи от това дали аргументът е NUMBER
тип или двоично число с плаваща запетая (BINARY_FLOAT
и BINARY_DOUBLE
).
За стойност на NUMBER
тип, знакът е:
- -1, ако
n
<0 - 0, ако
n
=0 - 1, ако
n
>0
За двоични числа с плаваща запетая, SIGN()
функцията връща знаковия бит на числото. Знакът е:
- -1, ако
n
<0 - +1, ако
n
>=0 илиn
=NaN
Пример
В този пример предавам NUMBER
тип:
SELECT SIGN(78.50)
FROM DUAL;
Резултат:
SIGN(78.50) ______________ 1
Ето още един пример за демонстриране на различни изходи с NUMBER
тип:
SELECT
SIGN(7),
SIGN(0),
SIGN(-7)
FROM DUAL;
Резултат:
SIGN(7) SIGN(0) SIGN(-7) __________ __________ ___________ 1 0 -1
Двоични числа с плаваща запетая
Ето пример за това какво се случва, когато преобразуваме тези числа като двоични числа с плаваща запетая:
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;
Резултат:
7 0 -7 NaN ____ ____ _____ ______ 1 1 -1 1
Добавих и NaN
към списъка (binary_float_nan
Литералът с плаваща запетая представлява стойност от тип BINARY_FLOAT
за които условието IS
NAN
е вярно).
Нечислови аргументи
Ето какво се случва, когато предадем нечислов аргумент, който не може да бъде преобразуван в числов тип данни:
SELECT SIGN('Bruce')
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT SIGN('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Нулеви стойности
Предаването на null
връща null
:
SET NULL 'null';
SELECT SIGN(null)
FROM DUAL;
Резултат:
SIGN(NULL) _____________ null
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Неправилен брой аргументи
Извикване на SIGN()
без подаване на аргументи връща грешка:
SELECT SIGN()
FROM DUAL;
Резултат:
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:
И предаването на грешен брой аргументи води до грешка:
SELECT SIGN(2, 3)
FROM DUAL;
Резултат:
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: