web-dev-qa-db-fra.com

Comment ajouter un zéro non significatif dans un nombre dans une requête Oracle SQL?

Je récupère une colonne nommée removal_count dans ma requête à l'aide de la fonction COUNT (). Dans result, le type de données de removal_count est BIGDECIMAL. Je veux convertir le nombre en cinq chiffres. SO Si la valeur est inférieure à cinq chiffres, elle doit être représentée par un zéro non significatif.

par exemple 1) Si le nombre d'enlèvement est 540, affichez 00540
2) Si le nombre d'enlèvement est de 60, affichez 00060

Si le nombre de suppressions est un entier/une valeur de chaîne, je peux ajouter des zéros en tête à l'aide d'une expression Java:

--if removal_count is integer--
String.format("%05d",removal_count)

--if removal_count is string--
("00000"+removal_count).subString(removal_count.length())

Pouvons-nous convertir removal_count en chaîne ou en entier (à partir de grandes décimales) afin que je puisse utiliser une expression Java donnée? Sinon, y a-t-il un moyen d'ajouter des zéros en tête dans la requête elle-même?

12
Madhusudan

Vous pouvez le faire de deux manières.

Méthode 1

Utiliser LPAD.

Par exemple,

SQL> WITH DATA(num) AS(
  2  SELECT 540 FROM dual UNION ALL
  3  SELECT 60 FROM dual UNION ALL
  4  SELECT 2 FROM dual
  5  )
  6  SELECT num, lpad(num, 5, '0') num_pad FROM DATA;

       NUM NUM_P
---------- -----
       540 00540
        60 00060
         2 00002

SQL>

La clause WITH sert uniquement à générer des exemples de données pour la démonstration. Dans votre requête, procédez comme suit:

lpad(removal_count, 5, '0')

Rappelez-vous qu'un nombre ne peut pas avoir zéros. Le résultat de la requête ci-dessus est un string et non un number.

Méthode 2

Utilisation de TO_CHAR et du modèle de format:

SQL> WITH DATA(num) AS(
  2  SELECT 540 FROM dual UNION ALL
  3  SELECT 60 FROM dual UNION ALL
  4  SELECT 2 FROM dual
  5  )
  6  SELECT num, to_char(num, '00000') num_pad FROM DATA;

       NUM NUM_PA
---------- ------
       540  00540
        60  00060
         2  00002

SQL>

Update: pour éviter l'espace supplémentaire utilisé pour le signe moins, utilisez FM au format TO_CHAR:

Sans FM:

SELECT TO_CHAR(1, '00000') num_pad,
  LENGTH(TO_CHAR(1, '00000')) tot_len
FROM dual;

NUM_PAD    TOT_LEN
------- ----------
 00001           6 

Avec FM:

SELECT TO_CHAR(1, 'FM00000') num_pad,
  LENGTH(TO_CHAR(1, 'FM00000')) tot_len
FROM dual;

NUM_PAD    TOT_LEN
------- ----------
00001            5
17
Lalit Kumar B

Utilisez la fonction LPAD pl/sql http://www.techonthenet.com/Oracle/functions/lpad.php .

removal_count = 540 
LPAD(TO_CHAR(removal_count), 5, '0');
Result: '00540'
5
adamliesko

Dans sqlplus, vous pouvez utiliser le format col:

SQL> sélectionnez 540 aa, 540 bb parmi dual;

    AA         BB

   540        540

SQL> col format bb 00000

SQL> /

    AA     BB

   540  00540

SQL>

0
Merk