PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL round (v numeryczne, s int)

Nie jest to udokumentowane, więc może się zmienić.

Oto moje 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;

Oraz 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;

Zarządzają około 500000 wywołaniami na sekundę, 6 razy wolniej niż standardowe round(numeric,integer) . Działają również przy zerowej i ujemnej precyzji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pl/pgSQL nie ma parametru $1 w instrukcji EXECUTE

  2. Sqlalchemy powielił klauzulę WHERE do FROM

  3. Jak mogę uzyskać listę wszystkich funkcji przechowywanych w bazie danych określonego schematu w PostgreSQL?

  4. Mapowanie enum Java na enum Postgres za pomocą EclipseLink

  5. Przechowywanie spotkań w bazie danych SQL, takiej jak Postgres do użytku z frameworkiem java.time