Re: Rounding in PGSQL

Поиск
Список
Период
Сортировка
От Joe Conway
Тема Re: Rounding in PGSQL
Дата
Msg-id 41150FAB.2090206@joeconway.com
обсуждение исходный текст
Ответ на Rounding in PGSQL  (Jiri Nemec <konference@menea.cz>)
Список pgsql-general
Jiri Nemec wrote:
> id     price_from     price_to      rounding
> 1      0              1500          0.1
> 2      1500           5000          1
> 3      5000           15000         10
> 4      15000          0             100
>
> Eg.:
> price = 15.5758, rounded = 15.6
> price = 1825.5540, rounded = 1826
> price = 7125.123, rounded = 7130
> price = 11825.5540, rounded = 11800
>
> Is there some possibility how to write own PGSQL function which I pass in
> price, function selects correct value from "rounding" column and
> return rounded value?

Try something like this:

create or replace function ballpark(numeric) returns numeric as '
select case
  when $1 <= 1500 then
   round($1, 1)
  when $1 <= 5000 then
   round($1, 0)
  when $1 <= 15000 then
   round($1, -1)
  else
   round($1, -2)
  end
' language sql;

select ballpark(15.5758),
        ballpark(1825.5540),
        ballpark(7125.123),
        ballpark(11825.5540);
  ballpark | ballpark | ballpark | ballpark
----------+----------+----------+----------
      15.6 |     1826 |     7130 |    11830
(1 row)

HTH,

Joe

В списке pgsql-general по дате отправления:

Предыдущее
От: Paul Tillotson
Дата:
Сообщение: Re: FW: Out of swap space & memory
Следующее
От: Joe Conway
Дата:
Сообщение: RFC: array literal syntax