sql >> Databasteknik >  >> RDS >> Oracle

SIGN() Funktion i Oracle

I Oracle, SIGN() funktion returnerar tecknet för dess argument som -1 , 0 eller 1 , beroende på om argumentet är negativt, noll eller positivt, och även beroende på om argumentet är av typen NUMBER eller ett flyttal.

Syntax

Syntaxen ser ut så här:

SIGN(n)

Där n kan vara vilken numerisk datatyp som helst eller vilken icke-numerisk datatyp som helst som implicit kan konverteras till NUMBER , och returnerar NUMBER .

Hur man dechiffrerar resultatet

Det faktiska resultatet kommer att bero på om argumentet är ett NUMBER typ, eller ett binärt flyttalstal (BINARY_FLOAT och BINARY_DOUBLE ).

För värdet NUMBER typ, tecknet är:

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

För binära flyttal, SIGN() funktion returnerar teckenbiten för talet. Teckenbiten är:

  • -1 om n <0
  • +1 om n >=0 eller n =NaN

Exempel

I det här exemplet skickar jag ett NUMBER typ:

SELECT SIGN(78.50)
FROM DUAL;

Resultat:

   SIGN(78.50) 
______________ 
             1

Här är ett annat exempel för att demonstrera olika utgångar med NUMBER typ:

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

Resultat:

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

Binära flyttalstal

Här är ett exempel på vad som händer när vi kastar dessa tal som binära flyttal:

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;

Resultat:

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

Jag lade också till NaN till listan (binary_float_nan flyttalsliteral representerar ett värde av typen BINARY_FLOAT för vilket villkoret IS NAN är sant).

Icke-numeriska argument

Så här händer när vi skickar ett icke-numeriskt argument som inte kan konverteras till en numerisk datatyp:

SELECT SIGN('Bruce')
FROM DUAL;

Resultat:

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

Nullvärden

Skickar null returnerar null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Resultat:

   SIGN(NULL) 
_____________ 
         null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Inkorrekt antal argument

Anropar SIGN() utan att skicka några argument returnerar ett fel:

SELECT SIGN()
FROM DUAL;

Resultat:

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:

Och att skicka fel antal argument resulterar i ett fel:

SELECT SIGN(2, 3)
FROM DUAL;

Resultat:

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. Datatyp matchar inte (kod 20) vid infogning

  2. Kontrollera om en icke-LOB-kolumn behöver uppdateras

  3. Vad är det bästa sättet att paginera resultat i SQL Server

  4. Använda String[] selectionArgs i SQLiteDatabase.query()