В 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: