PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL - làm tròn số dấu phẩy động

Hãy thử

SELECT round((1/3.)::numeric,4);

hoạt động với bất kỳ phiên bản nào của PostgreSQL.

Thiếu quá tải trong một số hàm PostgreSQL, tại sao (???):Tôi nghĩ "đó là sự thiếu" và bên dưới hiển thị cách giải quyết của tôi, nhưng hãy xem cuộc thảo luận này để có thêm lời giải thích .

Quá tải làm chiến lược truyền

Bạn có thể quá tải hàm ROUND với,

 CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
    SELECT ROUND($1::numeric,$2);
 $$ language SQL IMMUTABLE;

Bây giờ hướng dẫn của bạn sẽ hoạt động tốt, hãy thử (sau khi tạo hàm)

 SELECT round(1/3.,4); -- 0.3333 numeric

nhưng nó trả về kiểu NUMERIC ... Để duy trì quá tải sử dụng dấu phẩy đầu tiên, chúng ta có thể trả về một số float khi một tham số văn bản được cung cấp,

 CREATE FUNCTION ROUND(float, text, int DEFAULT 0) 
 RETURNS FLOAT AS $$
    SELECT CASE WHEN $2='dec'
                THEN ROUND($1::numeric,$3)::float
                -- ... WHEN $2='hex' THEN ... WHEN $2='bin' THEN... 
                ELSE 'NaN'::float  -- is like a error message 
            END;
 $$ language SQL IMMUTABLE;

Hãy thử

 SELECT round(1/3.,'dec',4);   -- 0.3333 float!
 SELECT round(2.8+1/3.,'dec',1); -- 3.1 float!
 SELECT round(2.8+1/3.,'dec'::text); -- need to cast string? pg bug 

Tái bút:Bạn có thể kiểm tra quá tải bằng \ df,

 \df round
  Schema    | Name  | Datatype of result        |    Datatype of parameters                       
 -----------+-------+---------------------------+--------------------------------
 myschema   | round | numeric                   | double precision, integer                                     
 myschema   | round | double precision          | double precision, text, integer
 pg_catalog | round | double precision          | double precision                                              
 pg_catalog | round | numeric                   | numeric                                                       
 pg_catalog | round | numeric                   | numeric, integer                                              

Các hàm pg_catalog là hàm mặc định, hãy xem hướng dẫn sử dụng toán học tích hợp chức năng .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận id chèn cuối cùng sau khi chèn đã chuẩn bị sẵn với PDO

  2. Làm cách nào để so sánh hàng hiện tại với hàng tiếp theo và hàng trước đó trong PostgreSQL?

  3. Cơ sở dữ liệu postgres đang chạy trong docker vẫn bị treo

  4. Cung cấp quyền hệ thống cửa sổ postgres để sao chép (windows 8)

  5. Làm cách nào tôi có thể tạo ràng buộc để kiểm tra xem email có hợp lệ trong postgres hay không?