SQL 中数值型数据截取以及四舍五入
SQL 中数值型数据截取及四舍五入
例一:
-- 将两个数值分别截取只保留两位小数 ( 注意此时字段默认为 decimal )
select CAST ( 10.097 as decimal ( 10, 2)) as [10.097 截取前 ]
, CAST ( 10.094 as decimal ( 10, 2)) as [10.094 截取前 ]
, CAST ( 10.145 as decimal ( 10, 2)) as [10.145 截取前 ]
例二:
-- 再次将两个数值分别截取只保留两位小数 ( 注意此时字段类型为 float )
declare @a float , @b float , @c float
set @a = 10.097
set @b = 10.094
set @c = 10.145
select CAST ( @a as decimal ( 10, 2)) as [10.097 截取前 ]
, CAST ( @b as decimal ( 10, 2)) as [10.094 截取前 ]
, CAST ( @c as decimal ( 10, 2)) as [10.145 截取前 ]
在做精度和小数位数的转换时 ,也要考虑 decimal 和 float 的不同类型字段的区别 。
否则用 Round 函数也是一样的效果 。
比如 :
declare @a float , @b float , @c float
set @a = 10.097
set @b = 10.094
set @c = 10.145
select ROUND ( @a , 2) as [10.097 进位前 ]
, ROUND ( @b , 2) as [10.094 进位前 ]
, ROUND ( @c , 2) as [10.145 进位前 ]
--result:
10.097 进位前 10.094 进位前 10.145 进位前
---------------------- ---------------------- ----------------------
10.1 10.09 10.14
( 1 行受影响 )
总结 :当字段类型为 float 时 ,进行四舍五入有时会有奇怪的结果产生 ,比如
declare @a float , @b float , @c float
set @a = 0.134
set @b = 0.145
set @c = 0.146
select ROUND ( @a , 2) as [0.134 进位前 ]
, ROUND ( @b , 2) as [0.145 进位前 ]
, ROUND ( @c , 2) as [0.146 进位前 ]
--result:
0.134 进位前 0.145 进位前 0.146 进位前
---------------------- ---------------------- ----------------------
0.13 0.14 0.15
( 1 行受影响 )
当字段类型为 decimal 时 ,对于高精度的小数位四舍五入时 ,并没有产生那样奇怪的结果 。比如 :
declare @a decimal ( 5, 3) , @b decimal ( 5, 3) , @c decimal ( 5, 3)
set @a = 0.134
set @b = 0.145
set @c = 0.146
select ROUND ( @a , 2) as [0.134 进位前 ]
, ROUND ( @b , 2) as [0.145 进位前 ]
, ROUND ( @c , 2) as [0.146 进位前 ]
--result:
0.134 进位前 0.145 进位前 0.146 进位前
---------------------- ---------------------- ----------------------
0.130 0.150 0.150
( 1 行受影响 )
所以我们在进行小数位的计算或转换时 ,我会优先考虑 decimal 类型的数值 。比如 在例一中默认的字段类型即是 decimal ,下面我们来看一下:
--1 、将 0.145 导入临时表
select 0.145 a
into #a
( 1 行受影响 )
-- 查看临时表中 a 字段类型
select
[ 表名 ] = c . Name ,
[ 列名 ] = a . Name ,
[ 标识 ] = case when is_identity = 1 then '√' else '' end ,
[ 类型 ] = b . Name
from
sys . columns a
left join
sys . types b on a . user_type_id = b . user_type_id
inner join
sys . objects c on a . object_id = c . object_id
where left( c . Name , 2)= '#a' and a . name = 'a'
-- 结果如下图示:
所以回看例一 ,在进行数据转换时 ,默认的字段类型仍是 decimal 。
附图 数据类型转换时的行为规范
SQL 中数值型数据截取以及四舍五入的更多相关文章
- SQL 中的LastIndexOf,截取最后一次出现字符后面的字符(转)
SQL如何取出一个字符串中最后一个特殊字符右边的字符,例如:10*20*300,怎样得到300? 使用reverse配合charindex来实现. reverse是把字符串倒置,然后通过charind ...
- sql中从指定位置截取指定长度字符串
1. 字符串函数应用 --从指定索引截取指定长度的字符串 ,) --获取字符串中指定字符的索引(从1开始) select charindex(',','ab,cdefg') --实际应用中的语句 , ...
- sql server 数值的四舍五入
sql中的四舍五入通常会有round 和cast( …… as decimal())两种方式: 个人建议使用cast 方式: 方式1: 经过试验,同样都可以做到四舍五入,但round如下实例1会报 ...
- SQL零星技术点:SQL中转换money类型数值转换为字符串问题
--SQL中转换money类型数值转换为字符串问题,直接转换就转为两位了,所以需要做一下处理.具体请看下述sql实例. 1 create table #test(price money) insert ...
- 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)
package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...
- SQL中字符串截取、连接、替换等函数的用法
一.SQL中SUBSTRING函数的用法1.功能:返回字符.二进制.文本或图像表达式的一部分2.语法:SUBSTRING ( expression, start, length )3.QL 中的 su ...
- sql中的字符串匹配、函数大全
假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些 ...
- sql中的函数
函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如 COUNT.SUM.MIN 和 MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 将值从一种数据类型转换为另一 ...
- SQL中Round(),Floor(),Ceiling()函数的浅析
项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...
随机推荐
- ASP.NET MVC4中使用Ninject
1.NuGet获取Ninject.dll 选中项目右键: .NET技术交流群 199281001 .欢迎加入. 2.全局注册 Global.asax.cs //注册Ninject依赖注入全局解析器 ...
- VS2013 EMMET插件学习
在VS2013中搜索EMMET插件,安装,重启IDE,即可使用. 最简单的一个用法示例: 在编辑器里输入:ul>li*5 按快捷键:CTRL+1 即可生成如下代码: <ul> < ...
- jquery json ajax
当html中用script包含了不在同一个目录下的js外部文件(主要是为了通用代码的重用)时,这个js文件的 内容就如同在当前html文件中了,写jquery的时候不用考虑路径问题,可以直接引用htm ...
- php面试题之二——Javascript(基础部分)
二.JavaScript部分 1. JS 表单弹出对话框函数是?获得输入焦点函数是? 弹出对话框函数:alert(), prompt(), confirm() 获得输入焦点函数:focus() 2. ...
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
面向对象编程中,函数.方法.类的构造函数是三种不同的概念. JS中,它们只是单个构造对象的三种不同的使用模式. 三种不同的使用模式 函数调用 function hello(username){ ret ...
- 关于 CAS 不能登录的问题
经过排查,是因为 Capistrano 部署中设置了 http_proxy.此时通过 cas.m.xxxx.com 域名去访问 CAS 服务时,就不通了,需要修改为 IP 来访问. 但是公司的 CAS ...
- [BZOJ3672][UOJ#7][NOI2014]购票
[BZOJ3672][UOJ#7][NOI2014]购票 试题描述 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. ...
- 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph
[UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...
- OpenCV入门(一)
参考:http://blog.csdn.net/poem_qianmo/article/details/20537737 这位同学挺牛的,才研一就出书了,实在是让人汗颜啊,不说了,多学习. 这一篇主要 ...
- maven最齐全配置pom.xml
0001<project xmlns="http://maven.apache.org/POM/4.0.0"0002 0003xmlns:xsi="http://w ...