sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLラウンド(v数値、s int)

    文書化されていないため、変更される可能性があります。

    これが私のround_half_even(numeric,integer)です :

    create or replace function round_half_even(val numeric, prec integer)
        returns numeric
    as $$
    declare
        retval numeric;
        difference numeric;
        even boolean;
    begin
        retval := round(val,prec);
        difference := retval-val;
        if abs(difference)*(10::numeric^prec) = 0.5::numeric then
            even := (retval * (10::numeric^prec)) % 2::numeric = 0::numeric;
            if not even then
                retval := round(val-difference,prec);
            end if;
        end if;
        return retval;
    end;
    $$ language plpgsql immutable strict;
    

    そしてround_half_odd(numeric,integer)

    create or replace function round_half_odd(val numeric, prec integer)
        returns numeric
    as $$
    declare
        retval numeric;
        difference numeric;
        even boolean;
    begin
        retval := round(val,prec);
        difference := retval-val;
        if abs(difference)*(10::numeric^prec) = 0.5::numeric then
            even := (retval * (10::numeric^prec)) % 2::numeric = 0::numeric;
            if even then
                retval := round(val-difference,prec);
            end if;
        end if;
        return retval;
    end;
    $$ language plpgsql immutable strict;
    

    1秒あたり約500000回の呼び出しを管理し、標準のround(numeric,integer)よりも6倍遅くなります。 。また、ゼロおよび負の精度でも機能します。



    1. 日付範囲のSQLクエリで年を無視する

    2. データベースからの配列データでのTemplate::Toolkitの使用

    3. ClearDBでMySQLエンジンのバージョンを更新するにはどうすればよいですか?

    4. MySQLデッドロックエラー