Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция SIGN() в Oracle

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Стъпки за синхронизиране в режим на готовност с първична база данни в Oracle

  2. Oracle Floats срещу число

  3. Как да изляза от скрипт в SQLPlus, когато възникне грешка и да се върна към подканата SQLPlus, без да прекъсвам връзката или да излизам от SQLPlus?

  4. Да се ​​изтрият ли всички записи с изключение на най-новия?

  5. В WiX как да тествам за съществуването на ключ в системния регистър (не стойност) за Oracle ODP.Net