Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction SIGN() dans Oracle

Dans Oracle, le SIGN() la fonction renvoie le signe de son argument sous la forme -1 , 0 , ou 1 , selon que l'argument est négatif, nul ou positif, et aussi selon que l'argument est de type NUMBER ou un nombre à virgule flottante.

Syntaxe

La syntaxe ressemble à ceci :

SIGN(n)

n peut être n'importe quel type de données numérique, ou n'importe quel type de données non numérique qui peut être implicitement converti en NUMBER , et renvoie NUMBER .

Comment déchiffrer le résultat

Le résultat réel dépendra si l'argument est un NUMBER type, ou un nombre binaire à virgule flottante (BINARY_FLOAT et BINARY_DOUBLE ).

Pour la valeur de NUMBER tapez, le signe est :

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

Pour les nombres binaires à virgule flottante, le SIGN() La fonction renvoie le bit de signe du nombre. Le bit de signe est :

  • -1 si n <0
  • +1 si n >=0 ou n =NaN

Exemple

Dans cet exemple, je passe un NUMBER saisissez :

SELECT SIGN(78.50)
FROM DUAL;

Résultat :

   SIGN(78.50) 
______________ 
             1

Voici un autre exemple pour démontrer diverses sorties avec le NUMBER saisissez :

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

Résultat :

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

Nombres binaires à virgule flottante

Voici un exemple de ce qui se passe lorsque nous transformons ces nombres en nombres binaires à virgule flottante :

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;

Résultat :

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

J'ai aussi ajouté NaN à la liste (le binary_float_nan le littéral à virgule flottante représente une valeur de type BINARY_FLOAT pour lequel la condition IS NAN est vrai).

Arguments non numériques

Voici ce qui se passe lorsque nous passons un argument non numérique qui ne peut pas être converti en un type de données numérique :

SELECT SIGN('Bruce')
FROM DUAL;

Résultat :

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

Valeurs nulles

Passer null renvoie null :

SET NULL 'null';

SELECT SIGN(null)
FROM DUAL;

Résultat :

   SIGN(NULL) 
_____________ 
         null

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null se produit à la suite d'un SQL SELECT déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Nombre d'arguments incorrects

Appel de SIGN() sans passer d'argument renvoie une erreur :

SELECT SIGN()
FROM DUAL;

Résultat :

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:

Et passer le mauvais nombre d'arguments entraîne une erreur :

SELECT SIGN(2, 3)
FROM DUAL;

Résultat :

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: