Monday, 16 February 2026

How to count number of digits after a decimal place in Oracle?

 /*Query to find length of digits/decimals in a number*/

WITH t
     AS (SELECT 123.456 num
         FROM   dual
         UNION ALL
         SELECT 1234
         FROM   dual
         UNION ALL
         SELECT 0.12345
         FROM   dual)
SELECT num,
       Length(To_char(Trunc(Abs(num))))      vscale,
       Length(To_char(MOD(Abs(num), 1))) - 1 vprecision,
                ( Length(Trim(trailing '0' FROM ( num - Floor(num) ))) - 1 decimal_places
FROM   t; 







WITH s
     AS (
        -- sample data --
        SELECT 1234 n
        FROM   dual
        UNION ALL
        SELECT 1234.123
        FROM   dual
         UNION ALL
         SELECT 0.123
         FROM   dual
        -- sample data --
        )
SELECT n,
       Length(Floor(n))
       + Nvl(Length(Rtrim(Substr(cn, Instr(cn, '.')+1), '0')), 0) nb_digits,
       Nvl(Length(Rtrim(Substr(cn, Instr(cn, '.') + 1), '0')), 0) nbr_decimal
FROM   (SELECT n,
               To_char(n, 'fm99999999999999999D99999999999999999',
               'NLS_NUMERIC_CHARACTERS = ''. ''') cn
        FROM   s); 





No comments:

Post a Comment