SQL-四舍五入到小数点后2位

SQL-四舍五入到小数点后2位,sql,rounding,Sql,Rounding,我需要将分钟转换为小时,四舍五入到小数点后2位。我还需要在小数点后最多显示2个数字。如果我的分钟数是650,那么小时数应该是10.83 以下是我目前掌握的情况: Select round(Minutes/60.0,2) from .... 但是在这种情况下,如果我的分钟数是,比如说,630小时是10.5000000。但我只想要10.50(四舍五入后)。如何实现这一点?您能否将结果转换为数值(x,2)?其中,与SQL Server 2012一样,您可以使用内置的: (仅供进一步阅读…以下代码片段

我需要将分钟转换为小时,四舍五入到小数点后2位。我还需要在小数点后最多显示2个数字。如果我的分钟数是650,那么小时数应该是10.83

以下是我目前掌握的情况:

Select round(Minutes/60.0,2) from ....

但是在这种情况下,如果我的分钟数是,比如说,630小时是10.5000000。但我只想要10.50(四舍五入后)。如何实现这一点?

您能否将结果转换为数值(x,2)?其中,与SQL Server 2012一样,您可以使用内置的:


(仅供进一步阅读…

以下代码片段可能会对您有所帮助:

select SUBSTR(ENDDTTM,1, 9), extract(DAY FROM (ENDDTTM)), ENDDTTM, BEGINDTTM,  (ENDDTTM - BEGINDTTM),substr(BEGINDTTM, 1,15), substr((ENDDTTM - BEGINDTTM), 12, 8),
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 3600 + substr((ENDDTTM - BEGINDTTM), 15, 2)*60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)),2) as seconds,
round((substr((ENDDTTM - BEGINDTTM), 12, 2)* 60 + substr((ENDDTTM - BEGINDTTM), 15, 2) +  substr((ENDDTTM - BEGINDTTM), 18, 2)/60 ), 2)as minutes,
round((substr((ENDDTTM - BEGINDTTM), 12, 2) + substr((ENDDTTM - BEGINDTTM), 15, 2)/60 +  substr((ENDDTTM - BEGINDTTM), 18, 2)/3600 ),2)  as hours

可与postgresql和Oracle一起使用

SELECT ename, sal, round(((sal * .15 + comm) /12),2) 
FROM emp where job = 'SALESMAN' 
你可以用

select cast((630/60.0) as  decimal(16,2))

下面的查询既有用又简单-

declare @floatExchRate float;
set @floatExchRate=(select convert(decimal(10, 2), 0.2548712))
select  @floatExchRate

输出为0.25

您在面额中使用的任何东西都应该是十进制的,例如
1548/100
将给出
15.00

Declare @number float = 35.44987665;
Select round(@number,2) 
在我们的示例中,如果将
100
替换为
100.0
,我们将得到
15.48

select 1548/100 
15.00000

select 1548/100.0
15.4800

0

我发现STR函数是实现这一点的最干净的方法

SELECT STR(ceiling(123.415432875), 6, 2)
试试这个:

选择CAST(四舍五入([Amount 1]/60,2)作为小数点(10,2))作为总计

将数字转换为
数字
十进制

将查询替换为以下内容

Sql server

Select Convert(Numeric(38, 2), Minutes/60.0) from ....
MySql:

Select Convert(Minutes/60.0, Decimal(65, 2)) from ....

Cast
函数是
Convert
函数的包装器。再加上SQL是一种解释语言,结果是即使这两个函数产生相同的结果,在
Cast
函数中也会有稍微多的幕后操作。使用
Convert
功能可以节省少量资金,但节省的资金会成倍增加。(38,2)和(65,2)表示要使用的最大精度级别和小数位数。

作为下面答案的补充,在公式中使用INT或非小数数据类型时,请记住将值乘以1和您喜欢的小数位数

i、 e.-
TotalPackages
是一个
INT
,因此分母
TotalContainers
,但我希望我的结果最多有6位小数

因此:


如果有人想将小数点后的位数四舍五入到x位:

SET @Result = CEILING(@Value * POWER(10, @Decimals)) / POWER(10, @Decimals)

其中@Value是要舍入的项的值,@Decimals是小数位数,例如在本例中为2。

<代码>选择圆形(630/60.0,2)已经给了我
10.50
。@u07ch当你已经在使用强制转换时,使用round()的目的是什么?@Ram问题没有指定sql server引擎-这就是为什么我自己突出显示了round v强制转换。“转换为数字”并不会在所有引擎中进行四舍五入操作,因此,如果计算出的数字是10.809,您将得到10.80,而不是所需的10.81。@u07ch感谢您的详细回答。它帮助了我。<代码> CAST(630 / 60作为数字(362))<代码> >代码> 10,50 你使用哪一个数据库引擎?如果T-SQL,这是一个复制品,考虑对你的答案增加一点解释。在十进制(10,6)的情况下会发生什么?在MS SQL Server中,这将产生确切的问题。输出将为35.44000000注意,这也引入了千位分隔符,例如,
1757.47
使用“0.00”而不是“N2”给出两位小数,但没有千位分隔符。是否转换为字符串?这不应该是一个问题,因为您可以对原始列进行排序,而不是对Format函数的输出进行排序。欢迎使用Stack Overflow!感谢您提供的代码片段,它可能会提供一些有限的、即时的帮助。一个恰当的解释将通过描述为什么这是一个很好的问题解决方案来极大地改进its,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。很好,这应该是迄今为止最好的answe之一。。为什么我会这么说……至少在DB2上,这并不能使结果更加接近。天花板是否会将其四舍五入到124?感谢您是唯一提供SQL Server和MySQL解决方案的人,并提供了一个解释
SELECT STR(ceiling(123.415432875), 6, 2)
Select Convert(Numeric(38, 2), Minutes/60.0) from ....
Select Convert(Minutes/60.0, Decimal(65, 2)) from ....
((m.TotalPackages * 1.000000) / m.TotalContainers) AS Packages,
CAST(QuantityLevel AS NUMERIC(18,2))
SET @Result = CEILING(@Value * POWER(10, @Decimals)) / POWER(10, @Decimals)