分享好友 数据库首页 频道列表

sqlserver四舍五入使用round函数及cast和convert函数

SQL Server  2015-11-09 14:450

引言

      今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1))  我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四舍五入函数,数据也没有四舍五入,而测试说他们自己验证后觉的数据是经过四舍五入了的。 想到这里于是我再试了试存储过程的每个计算点,才发现了这个问题。

ROUND

     那么用到四舍五入并且保留小数点时我们肯定会首选ROUND函数,  如果字段的数据类型是decimal(18,10)时那么四舍五入后还会有很多0出现。

CAST和CONVERT

    其实我使用强转时并没有打算四舍五入结果,只是单纯为了得到符合我要求的数据,今天才发现这两个强转也会四舍五入结果,也就是说下面三个语句将会返回相同的结果值

select ROUND(32.678,1)  --32.700
select CAST(32.678 as DECIMAL(5,1)) --32.7
select convert(NUMERIC(5,1),32.678) --32.7

下面抽个空给大家介绍SQL的四舍五入ROUND函数

SQL四舍五入2007/11/01 16:35问题1:

SELECT CAST('123.456' as decimal) 

将会得到 123(小数点后面的将会被省略掉)。

如果希望得到小数点后面的两位。

则需要把上面的改为

SELECT CAST('123.456' as decimal(38, 2)) ===>123.46

自动四舍五入了!

问题2:

SELECT ROUND(123.75633, 2, 1), ROUND(123.75633, 2)

上面的SQL得到的2个值是不一样的,前一个是:123.75000,后一个是:123.76000。

因为前者在进行四舍五入之前,小数点后已经被截取,保留了2位。

而后者则没有被截取,四舍五入时自然就会得到123.76000

ROUND

返回数字表达式并四舍五入为指定的长度或精度。

语法

ROUND ( numeric_e-xpression , length [ , function ] )

参数

numeric_e-xpression

精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。

length

是 numeric_e-xpression 将要四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_e-xpression 四舍五入为 length 所指定的小数位数。当 length 为负数时,numeric_e-xpression 则按 length 所指定的在小数点的左边四舍五入。

function

是要执行的操作类型。function 必须是 tinyint、smallint 或 int。如果省略 function 或 function 的值为 0(默认),numeric_e-xpression 将四舍五入。当指定 0 以外的值时,将截断 numeric_e-xpression。

返回类型

返回与 numeric_e-xpression 相同的类型。

注释

ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。

示例 结果

ROUND(748.58, -4) 0

当 length 是负数时,无论什么数据类型,ROUND 都将返回一个四舍五入的 numeric_e-xpression。

示例 结果

ROUND(748.58, -1) 750.00
ROUND(748.58, -2) 700.00
ROUND(748.58, -3) 1000.00

示例

A. 使用 ROUND 和估计值

下例显示两个表达式,说明使用 ROUND 函数且最后一个数字始终是估计值。

Select ROUND(123.9994, 3), ROUND(123.9995, 3) 
GO

下面是结果集:

----------- -----------
123.9990    124.0000 

B. 使用 ROUND 和四舍五入的近似值

下例显示四舍五入和近似值。

语句 结果

Select ROUND(123.4545, 2)
123.4500
Select ROUND(123.45, -2)
100.00

C. 使用 ROUND 截断

下例使用两个 Select 语句说明四舍五入和截断之间的区别。第一个语句四舍五入结果。第二个语句截断结果。

语句 结果

Select ROUND(150.75, 0)
151.00
Select ROUND(150.75, 0, 1)
150.00

查看更多关于【SQL Server】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
sql mysql和sqlserver存在就更新,不存在就插入的写法(转)
转自:http://hi.baidu.com/tidy0608/item/ff930fe2436f2601560f1dd9sqlsever数据存在就更新,不存在就插入的两种方法两种经常使用的方法:1. Update, if @@ROWCOUNT = 0 then insertUPDATETable1 SETColumn1 = @newValue WHEREId = @idIF@@ROWCOU

0评论2023-02-10605

db2,oracle,mysql ,sqlserver限制返回的行数
不同数据库限制返回的行数的关键字如下:①db2select * from table fetch first 10 rows only; ②oracleselect * from table where rownum=10; ③mysqlselect * from table limit 10; ④sqlServerselect top 10 * from table;

0评论2023-02-10309

SqlServer/Oracle 通过一个sql判断新增/修改
if (Config.DbInfo.DbType.Equals(DBType.SQLServer)){sql = " IF EXISTS (SELECT 1 FROM wifi.imsi_model_status WHEREdevice_id = @device_id and wireless='" + row[0].GetString() + "') UPDATE wifi.imsi_model_status SET model_status = @mo

0评论2023-02-09812

数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题
创建数据库表1 create table person2 (3 FName varchar(20),4 FAge int,5 FRemark varchar(20),6 primary key(FName)7 )View Code

0评论2023-02-09691

sqlserver,oracle,mysql等的driver驱动,url怎么写
oracledriver="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:数据库名"sqlserverdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver"url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名"

0评论2023-02-09957

MySQL、SqlServer、Oracle三大主流数据库分页查询
  在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。  下面就分别给大家介绍、讲解一下三种数

0评论2023-02-09867

数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题(续1之拼接字符串)
  上一篇文章http://www.cnblogs.com/valiant1882331/p/4056403.html写的太长了,所以就换了一篇,链接上一节继续字符串的拼接MySql中可以使用"+"来拼接两个字符串.select '12'+'33',FAge+'1' from t_employeeView Code

0评论2023-02-09798

SQLSERVER简单创建DBLINK操作远程服务器数据库的方法
这篇文章主要介绍了SQLSERVER简单创建DBLINK操作远程服务器数据库的方法,涉及SQLSERVER数据库的简单设置技巧,具有一定参考借鉴价值,需要的朋友可以参考下

0评论2016-06-20925

Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍
这篇文章主要介绍了Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍 的相关资料,需要的朋友可以参考下

0评论2016-06-20468

sqlserver中几种典型的等待
在最近的几次sqlserver问题的排查中,总结了sqlserver几种典型的等待类型,类似于oracle中的等待事件,如果看到这样的等待类型时候能够迅速定位问题的根源,下面通过一则案例来把这些典型的等待处理方法整理出来

0评论2016-06-20120

Windows2012配置SQLServer2014AlwaysOn的图解
SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移。接下来通过本文给大家介绍Windows2012配置SQLServer2014AlwaysOn的方法,感兴趣的朋友一起学习吧

0评论2016-05-18121

SQLserver2014(ForAlwaysOn)安装图文教程
这篇文章主要介绍了SQLserver2014(ForAlwaysOn)安装图文教程的相关资料,需要的朋友可以参考下

0评论2016-05-18219

sqlserver 因为选定的用户拥有对象,所以无法除去该用户的解决方法
这篇文章主要介绍了sqlserver 因为选定的用户拥有对象,所以无法除去该用户,因为是附加数据库选择了与源服务器一样的用户导致

0评论2016-05-18279

sqlserver还原数据库的时候出现提示无法打开备份设备的解决方法(设备出现错误或设备脱)
今天在恢复数据库的时候,因为是异地部分还原,出现提示 无法打开备份设备 E:\自动备份\ufidau8xTmp\UFDATA.BAK 。设备出现错误或设备脱,这里分享一下解决方法,需要的朋友可以参考一下

0评论2016-04-28226

SQL(MSSQLSERVER)服务启动错误代码3414的解决方法
这篇文章主要介绍了SQL(MSSQLSERVER)服务启动错误代码3414的解决方法,需要的朋友可以参考下

0评论2016-04-28285

SQLServer行列互转实现思路(聚合函数)
这篇文章主要介绍了SQLServer行列互转实现思路,使用聚合函数pivot/unpivot实现行列互转,感兴趣的小伙伴们可以参考一下

0评论2016-04-28193

更多推荐