Dynamic length on number format in to_number Oracle SQL

后端 未结 3 1260
日久生厌
日久生厌 2021-01-21 06:58

I have a table with numbers stored as varchar2 with \'.\' as decimal separator (e.g. \'5.92843\').

I want to calculate with these numbers using \',\' as tha

3条回答
  •  隐瞒了意图╮
    2021-01-21 07:22

    You might try one of the following approaches (take them for an idea as I do not have a DB for trying it here):

    1) Use TO_NUMBER without a format. According to Oracle docs it uses a dot for decimal separator then.

    If your number contains group separators, then first remove these and convert then:

    TO_NUMBER(TRANSLATE(number, ',''' ,''))
    

    2) Generate the number format from your input:

    select TO_NUMBER(n, TRANSLATE(n,' 1,234.567890',TO_CHAR(9999.9, '9G999D9')||'99999'))
    from (select '9,876.54' as n from dual);
    

    The latter translates all digits to 9, your group character (here: comma) and your decimal separator (here: dot) to those used by Oracle by default.

提交回复
热议问题