PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да закръгля REAL тип до NUMERIC?

real е тип със загуби, неточен тип с плаваща запетая. Той използва само 4 байта за съхранение и не може да съхранява прецизно представените числови литерали. Освен това подробностите за внедряването зависят от вашата платформа. Разгледайте главата „Типове с плаваща запетая“ в ръководство.

Няма нищо лошо нито в round() или cast() . За точни резултати ще трябва да използвате numeric като начало.

Одит на функция

CREATE OR REPLACE FUNCTION test3()
  RETURNS void AS
$func$
DECLARE
   r record;
BEGIN
   FOR r IN 
      SELECT abs_km AS km
            ,cast(abs_km AS numeric) AS km_cast
            ,round(abs_km::numeric, 2) AS km_round
      FROM   gps_entry
   LOOP
      RAISE NOTICE 'km: % , km_cast: % , km_round: %'
                  , r.km, r.km_cast, r.km_round;
      INSERT INTO test (km, casting, rounding)
      VALUES (r.km, r.km_cast, r.km_round);
   END LOOP;    
END
$func$ LANGUAGE plpgsql;
  • Не цитирайте името на езика plpgsql . Това е идентификатор.
  • Няма смисъл да се закръглява до 2 дробни цифри след прехвърляне към numeric(16,2) , който принудително закръгля вече. Или - или ..

    round(abs_km:: numeric(16,2), 2) as round
    round(abs_km::numeric, 2) as round
    abs_km::numeric(16,2) as round

И накрая, трябва да надстроите до текуща версия. Postgres 8.3 достигна EOL и не се поддържа.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. currval все още не е дефиниран тази сесия, как да получите последователности от много сесии?

  2. Проблеми с паралелността при извличане на идентификатори на нововмъкнати редове с ibatis

  3. Показване на избраните резултати вертикално в psql, както се прави от \G на MySQL

  4. След актуализиране до macOS Big Sur не мога да се свържа с моята база данни PostgreSQL с MAMP

  5. Динамично генериране на колони в PostgreSQL