sql >> Database >  >> RDS >> Oracle

SIGN() Functie in Oracle

In Oracle, de SIGN() functie retourneert het teken van zijn argument als -1 , 0 , of 1 , afhankelijk van of het argument negatief, nul of positief is, en ook afhankelijk van of het argument van het type NUMBER is of een getal met drijvende komma.

Syntaxis

De syntaxis gaat als volgt:

SIGN(n)

Waar n kan elk numeriek gegevenstype zijn, of elk niet-numeriek gegevenstype dat impliciet kan worden geconverteerd naar NUMBER , en retourneert NUMBER .

Hoe het resultaat te ontcijferen

Het werkelijke resultaat hangt af van het feit of het argument een NUMBER is type, of een binair getal met drijvende komma (BINARY_FLOAT en BINARY_DOUBLE ).

Voor waarde van NUMBER type, het teken is:

  • -1 als n <0
  • 0 als n =0
  • 1 als n >0

Voor binaire getallen met drijvende komma, de SIGN() functie retourneert het tekenbit van het getal. Het tekenbit is:

  • -1 als n <0
  • +1 als n >=0 of n =NaN

Voorbeeld

In dit voorbeeld geef ik een NUMBER . door typ:

SELECT SIGN(78.50)
FROM DUAL;

Resultaat:

   SIGN(78.50) 
______________ 
             1

Hier is nog een voorbeeld om verschillende outputs te demonstreren met het NUMBER typ:

SELECT 
    SIGN(7),
    SIGN(0),
    SIGN(-7)
FROM DUAL;

Resultaat:

   SIGN(7)    SIGN(0)    SIGN(-7) 
__________ __________ ___________ 
         1          0          -1

Binaire getallen met drijvende komma

Hier is een voorbeeld van wat er gebeurt als we die getallen casten als binaire getallen met drijvende komma:

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;

Resultaat:

   7    0    -7    NaN 
____ ____ _____ ______ 
   1    1    -1      1 

Ik heb ook NaN . toegevoegd naar de lijst (de binary_float_nan letterlijke drijvende komma vertegenwoordigt een waarde van het type BINARY_FLOAT waarvoor de voorwaarde IS NAN is waar).

Niet-numerieke argumenten

Dit is wat er gebeurt als we een niet-numeriek argument doorgeven dat niet kan worden geconverteerd naar een numeriek gegevenstype:

SELECT SIGN('Bruce')
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT SIGN('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Null-waarden

Doorgeven van null retourneert null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Resultaat:

   SIGN(NULL) 
_____________ 
         null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Onjuist aantal argumenten

SIGN() . aanroepen zonder het doorgeven van argumenten geeft een fout:

SELECT SIGN()
FROM DUAL;

Resultaat:

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:

En het doorgeven van het verkeerde aantal argumenten resulteert in een fout:

SELECT SIGN(2, 3)
FROM DUAL;

Resultaat:

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. Hoe kan ik deze fout oplossen:niet-ondersteunde SQL92?

  2. Hoe de MySQL-versie te controleren?

  3. Hoe de positie van een argument te retourneren binnen een lijst met argumenten in MySQL

  4. Hoe de opdrachtregelprompt in SQLite te wijzigen