sql >> Database teknologi >  >> RDS >> Oracle

SIGN() Funktion i Oracle

I Oracle er SIGN() funktion returnerer tegnet af sit argument som -1 , 0 eller 1 , afhængigt af om argumentet er negativt, nul eller positivt, og også afhængigt af om argumentet er af typen NUMBER eller et flydende kommatal.

Syntaks

Syntaksen ser sådan ud:

SIGN(n)

Hvor n kan være enhver numerisk datatype eller enhver ikke-numerisk datatype, der implicit kan konverteres til NUMBER , og returnerer NUMBER .

Sådan tyder du resultatet

Det faktiske resultat vil afhænge af, om argumentet er et NUMBER type eller et binært flydende decimaltal (BINARY_FLOAT og BINARY_DOUBLE ).

For værdien NUMBER type, tegnet er:

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

For binære flydende kommatal er SIGN() funktion returnerer fortegnsbitten af ​​tallet. Tegnbitten er:

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

Eksempel

I dette eksempel sender jeg en NUMBER type:

SELECT SIGN(78.50)
FROM DUAL;

Resultat:

   SIGN(78.50) 
______________ 
             1

Her er et andet eksempel til at demonstrere forskellige output med NUMBER type:

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

Resultat:

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

Binære floating-point-tal

Her er et eksempel på, hvad der sker, når vi kaster disse tal som binære flydende kommatal:

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 

Jeg tilføjede også NaN til listen (binary_float_nan floating-point literal repræsenterer en værdi af typen BINARY_FLOAT for hvilken betingelsen IS NAN er sandt).

Ikke-numeriske argumenter

Her er, hvad der sker, når vi sender et ikke-numerisk argument, der ikke kan konverteres til en numerisk datatype:

SELECT SIGN('Bruce')
FROM DUAL;

Resultat:

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

Nul-værdier

Sender null returnerer null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Resultat:

   SIGN(NULL) 
_____________ 
         null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kalder SIGN() uden at sende nogen argumenter returnerer en fejl:

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:

Og at sende det forkerte antal argumenter resulterer i en fejl:

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. Datatypepræference i SQL Server

  2. Brug af Dapper med Oracle

  3. Hvordan udskriver du resultatet af en PostgreSQL-forespørgsel i CSV- eller TSV-format fra kommandolinjen?

  4. Hvordan man ikke viser dubletter i SQL