lunes, 3 de junio de 2019

Get Decimal Number in PostgreSQL


-- select * from fnt_get_decimal_number(1500.1257, 'N');

-- select * from fnt_get_decimal_number(1500.120, 'N');

-- select * from fnt_get_decimal_number(1500.120, 'Y');

-- drop function fnt_get_decimal_number(p_number numeric, p_take_zero char)

create or replace function fnt_get_decimal_number(p_number numeric, p_skip_zero char)
returns int
as $$
declare
    v_number varchar;

    v_decimal varchar;
    v_reverse_decimal varchar;

    v_resultado int;
begin
    v_number = p_number::varchar;

    v_decimal = substring(v_number, position('.' in v_number) + 1, length(v_number));

    v_reverse_decimal = reverse(v_decimal);

    if(p_skip_zero = 'Y')then
        if(substring(v_reverse_decimal, 0, length(v_reverse_decimal) - 1) = '0')then
            v_resultado = length(v_decimal) - 1;
        else
            v_resultado = length(v_decimal);
        end if;
    elseif(p_skip_zero = 'N')then
        v_resultado = length(v_decimal);
    end if;

    if(position('.' in v_number) > 0)then
        return v_resultado;
    else
        return 0;
    end if;
end;
$$ language plpgsql;

No hay comentarios:

Publicar un comentario