Vraag Hoe leidende nul toevoegen aan een getal in de Oracle SQL-query?


Ik haal in mijn query een kolom met de naam removal_count op met de functie COUNT (). In resultaat is het datatype van removal_count BIGDECIMAL. Ik wil nummer omzetten in vijf cijfers. Dus als de waarde minder dan vijf cijfers is, moet deze worden weergegeven met de voorloopnullen.

bijv. 1) Als het aantal verwijderingen 540 is, toon dan 00540
    2) Als het aantal verwijderingen 60 is, geeft u 00060 weer

Als het aantal verwijderingen een geheel getal / tekenreeks is, kan ik voorloopnullen toevoegen met behulp van java expression:

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

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

Kunnen we removal_count in string of integer (van groot decimaal) converteren zodat ik de gegeven java-expressie kan gebruiken? Of is er een manier om vooraanstaande nullen in de query zelf toe te voegen?


11
2017-07-29 07:08


oorsprong


antwoorden:


Je zou het op twee manieren kunnen doen.

Methode 1

Gebruik makend van LPAD.

Bijvoorbeeld,

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>

De WITH-component is alleen om voorbeeldgegevens voor demo te maken, doe in je huidige query gewoon:

lpad(removal_count, 5, '0')

Denk eraan, a aantal kan niet hebben voorloopnullen. De uitvoer van bovenstaande query is een draad en niet een aantal.

Methode 2

Gebruik makend van TO_CHAR en formaatmodel:

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>

Bijwerken : Gebruik om de extra voorloopruimte te vermijden die wordt gebruikt voor minteken FM in de TO_CHAR formaat:

Zonder FM:

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

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

Met FM:

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

NUM_PAD    TOT_LEN
------- ----------
00001            5

17
2017-07-29 07:14



Gebruik de LPAD pl / sql-functie http://www.techonthenet.com/oracle/functions/lpad.php.

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

5
2017-07-29 07:11



In sqlplus kunt u de col-indeling gebruiken:

SQL> selecteer 540 aa, 540 bb uit dual;

    AA         BB

   540        540

SQL> col bb-indeling 00000

SQL> /

    AA     BB

   540  00540

SQL>


0
2018-03-21 14:51