说我有一个表,该表有两列,即数量和百分比,其中我的百分比以小数表示。现在,我想将这两列相乘并将值四舍五入到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
我尝试过在线搜索这种功能,但是找不到合适的解决方案。
答案 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
第三个参数不为零将导致在第二个参数中指定的小数点后截断。
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/sqlref/src/tpc/db2z_bif_truncate.html
答案 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;