How to display the leading zero's in a number of oracle

前端 未结 4 1852
伪装坚强ぢ
伪装坚强ぢ 2021-01-06 04:02

I have an oracle column(artnr) contains a length of 1 which is of type number(9). I want to update the number as following...

Example :

If number is 0 then i

相关标签:
4条回答
  • 2021-01-06 04:40

    In my case the goal was calculate the sum of the values of the different currencies, but the issue was created by the data type of the field VALUE that is VARCHAR2(255 BYTE). I have found this solution, for handle the problem of the leading zero:

        SELECT ID_OUT
              , CASE WHEN REPLACE(SUM(REPLACE(VALUE, '.', ',')), ',', '.') LIKE '-.%' THEN REPLACE(REPLACE(SUM(REPLACE(VALUE, '.', ',')), ',', '.'), '-.', '-0.')
                     WHEN REPLACE(SUM(REPLACE(VALUE, '.', ',')), ',', '.') LIKE '.%' THEN REPLACE(REPLACE(SUM(REPLACE(VALUE, '.', ',')), ',', '.'), '.', '0.')
                     ELSE REPLACE(SUM(REPLACE(VALUE, '.', ',')), ',', '.') 
                END AS VALORE
             , LOB
             , 'TOTAL' CURRENCY
             , COUNTRY
        FROM QRT_OUT_DATI
        WHERE (CURRENCY != 'Total' AND CURRENCY != 'TOTAL')
        GROUP BY ID_OUT, LOB, COUNTRY, CURRENCY 
        ORDER BY LOB;
    
    0 讨论(0)
  • 2021-01-06 04:52
    select to_char(x,'00000') from dual;
    
    0 讨论(0)
  • 2021-01-06 04:53

    If you really want to store those numbers with preceeding zeroes then you must change the datatype to varchar2. Then you can apply to_char( artnr , 'fm00009') in the update statement. Of course, this might come with unintended consequences. Go for this solution at your own risk.

    You might also consider creating a view that zero-paddes the number "on the fly" when you select from that view.

    0 讨论(0)
  • 2021-01-06 04:56

    If number is 0 then it should be 00000 If number is 1 then it should be 00001 If number is 12 the it should be 00012

    Remember : here 00000,0000, and 00012 are of number datatypes

    Firstly, Numbers don't have leading zero's. So, when you store the NUMBER values, you let them behave like NUMBERs. it is only when you want to display them, you can use LPAD and add the leading zeroes. Which conevrts the number to a string with leading zeroes.

    So, no need to update the table. Use LPAD to display them the way you want.

     SQL> WITH DATA AS
      2    ( SELECT 1 ID FROM DUAL UNION ALL
      3      SELECT 11 ID FROM DUAL
      4    )
      5  SELECT
      6     LPAD(ID,5, 0) id
      7  FROM DATA
      8  /
    
    ID
    -----
    00001
    00011
    

    To avoid, implicit data type conversion, use TO_CHAR before applying LPAD.

    0 讨论(0)
提交回复
热议问题