与EXCEL中一样,sql中是否有ROUNDDOWN()函数

时间:2019-02-14 04:05:24

标签: mysql sql database math

说我有一个表,该表有两列,即数量和百分比,其中我的百分比以小数表示。现在,我想将这两列相乘并将值四舍五入到2位小数。在这里四舍五入意味着将1-9中的所有数字四舍五入。在SQL中是否有内置功能可以像在Excel中那样?

示例:

13.567 should round to 13.56
136.7834 should round to 136.78
0.7699 should round to 0.76

我尝试过在线搜索这种功能,但是找不到合适的解决方案。

5 个答案:

答案 0 :(得分:2)

您可以使用TRUNCATE ()进行此舍入

select TRUNCATE(2.847, 2) as rounddown

SELECT Floor(135.675); //for integer rounding, like 135

您也可以使用

select round(123.456, 2, 1) as rounddown

第三个参数不为零将导致在第二个参数中指定的小数点后截断。

DB Fiddle

https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/sqlref/src/tpc/db2z_bif_truncate.html

https://www.w3schools.com/sql/func_sqlserver_floor.asp

答案 1 :(得分:1)

有一个FLOOR函数,可以根据您的用例进行调整:

SELECT FLOOR(value * 100) / 100 AS RoundedValue

答案 2 :(得分:1)

该问题的解决方案是截断多余的小数,这可以通过使用ROUND函数的额外参数ROUND(number,decimal_places,0/1)来实现。在这里,如果最后一个参数不是0,它将截断而不是四舍五入,而四舍五入等效于我正在寻找的excel的ROUNDDOWN()函数。

或者,您可以使用TRUNCATE()函数,将要保留的小数位数作为第二个参数,该数字将舍去任何多余的小数,用作ROUNDDOWN()函数。

答案 3 :(得分:0)

我希望此舍入实用程序可以帮助某人:

CREATE FUNCTION `get_round`(val DOUBLE, nDigits INT, RoundStyle VARCHAR(255)) RETURNS double
        NO SQL
    BEGIN
      DECLARE a DOUBLE DEFAULT 0;
      SET nDigits = ifnull(nDigits, 0);

    CASE
        WHEN UCASE(RoundStyle) IN ('ROUND NEAREST','', 'NEAREST', '', 'RND','ROUND', 'DEFAULT','DFLT', null) THEN #normal rounding, but up from 10.50#
                    SET a = round(val, nDigits); 
        WHEN UCASE(RoundStyle) IN('ROUND UP', 'UP') THEN #ROUND 10.554 to 10.56
                    SET a =  ceil(val * (power(10, nDigits) )) / (power(10, nDigits));
        WHEN UCASE(RoundStyle) IN('ROUND DOWN', 'DOWN') THEN #ROUND 10.555 to 10.55
                    SET a =  truncate(val, nDigits) ;                 
        WHEN UCASE(RoundStyle) IN('ROUND BANKER', 'BANKER','BANKERS ROUNDING') THEN #ROUND TO THE NEAREST EVEN 10.555 is 10.56 and 10.565 is 10.56
                    SET a = IF(ABS(val - TRUNCATE(val, nDigits)) * POWER(10, nDigits + 1) = 5 
                            AND NOT CONVERT(TRUNCATE(ABS(val) * POWER(10, nDigits), 0), UNSIGNED) % 2 = 1,
                            TRUNCATE(val, nDigits), ROUND(val, nDigits));
        WHEN UCASE(RoundStyle) IN('ROUND UP INTEGER', 'INT UP','UP INT') THEN #10.4 rounds to 11.0
                    SET a =  ceiling(val);
        WHEN UCASE(RoundStyle) IN('ROUND DOWN INTEGER', 'INT DOWN','DOWN INT') THEN #10.6 rounds to 10.0
                    SET a =  floor(val);
    END CASE;

    RETURN ifnull(a, 0);
    END

答案 4 :(得分:-2)

是的,在sql中有一些函数可以进行

例如:

SELECT ProductName, Price, FlOOR(Price) AS RoundedPrice
    FROM Products;