sql用什么来表示excel小数位数数

35339人阅读
数据库(10)
数据库里的 float momey 类型,都会精确到多位小数。但有时候 我们不需要那么精确,例如,只精确到两位有效数字。
1. 使用 Round() 函数,如 Round(@num,2) &参数 2 表示 保留两位有效数字。
2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,decimal(18,2) 指定要保留的有效数字。
这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的 变为0 ,成 2.3300。但 Convert() 函数就不会。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:205873次
积分:2574
积分:2574
排名:第9669名
原创:65篇
转载:28篇
评论:19条
(2)(10)(8)(1)(5)(4)(3)(3)(2)(1)(7)(7)(2)(1)(9)(2)(5)(9)(3)(1)(1)(11)SQL数值四舍五入小数点后保留2位
1.round() 函数是四舍五入用,第一个参数是我们要被操作的数据,
第二个参数是设置我们四舍五入之后小数点后显示几位。
2.numeric 函数的2个参数,第一个表示数据长度,第二个参数表示小数点后位数。
select cast(round(12.52,2) as numeric(5,2)) 结果:12.52
select cast(round(12.5525,2) as numeric(5,2)) 结果:12.56
select cast(round(122.52255,2) as numeric(5,2)) 结果:122.52
select cast(round(,2) as numeric(5,2)) 结果:报错了! 原因是:,整数位是4,小数位是2,加起来4+2=6,超出了numeric设置的5位,所以为了保险,可以增减numeric的参数,例如numeric(20,2)。
更多信息请查看
更多信息请查看
易贤网手机网站地址:
【】&&&&&【点此处查询各地各类考试咨询QQ号码及交流群】
由于各方面情况的不断调整与变化,易贤网所提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
云南各地招聘
&nbsp&nbsp&nbsp &nbsp&nbsp&nbsp会员注册
本站不参与评论,(&&点此深度交流 )
自觉遵守:爱国、守法、自律、真实、文明的原则
尊重网上道德,遵守中华人民共和国各项有关法律法规
严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的评论
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
您在本站发表的评论,本站有权保留、转载、引用或者删除
参与本评论即表明您已经阅读并接受上述条款SQL Server字段类型 decimal(18 6)小数点前是几位?记一次数据库SP的BUG处理 - MSSQL - 次元立方网 - 电脑知识与技术互动交流平台
SQL Server字段类型 decimal(18 6)小数点前是几位?记一次数据库SP的BUG处理
SQL Server 字段类型 decimal(18,6)小数点前是几位?
不可否认,这是一个很低级的问题....
为什么会问这么低级的问题?
由于这个问题,导致一个数据导入的SP执行失败....以至于困扰了我好几个小时....
事情是这样的...
公司总部上了一套Oracle的ERP,我们系统中有些数据要从里面取,比如Supplier,Product等。
Oracle会导出数据文件,我们同SSIS刷到本地相应的数据库(数据库的字段和Oracle的一致)。
对我们来说就是数据源变了,需要把Oracle的数据转化成我们先系统可以用的数据。
由于Oracle上线比较"快",为了让现有的系统基本能跑起来,同事写一个SP转化导入到我们系统的数据库。
这个SP 写的比较粗糙。
同事只是把Oracle的数据在进行处理之后 AS成现系统的字段。
sql语句是这样的:
[DT_UAMT],[DT_DAMT],[DT_AMT]
INTO Temp_DT_PODT
NULL AS DT_UAMT
,convert(varchar,convert(decimal(18,6),isnull(usd_amount,'0') * 100)) as DT_DAMT
,convert(varchar,convert(decimal(18,6),isnull(LINE_AMOUNT,'0') * 100)) as DT_AMT
OracleDB.[dbo].OracleTB )
当然了 字段不止这三个,一个表有将近100个字段,这里只是举例说明问题。
同事这里用到了SELECT INTO语句。
SQL SELECT INTO 语句可用于创建表的备份复件。
这样写可以快速达到效果不用一个一个表去建并且保证数据可以完全导出过来。
但是这样写会有问题,
1、首先SELECT INTO需要into的这个表不存在,所以每次都需要把Temp_DT_PODT给Drop掉。
2、由于Oracle的字段类型和我们的不一样,会导致创建出来的字段类型和我们原数据库的类型不一样。
3、当用 null as成一个字段的时候,into的表中对应字段类型为int
上述第三条会导致有些之前SP会报错....
你可能会说不用NULL as&DT_UAMT用 '' as&DT_UAMT。当然是可以的。
我也说过 这个SP是为了之前的系统能够跑起来写的,有些问题存在是正常的.....
然后解决这些问题就交给了我.....(我好苦逼,哭晕在厕所....)
毕竟SELECT INTO 语句可用于创建表的备份复件的,我们刷数据还是用insert into的好。
insert into 是需要表的。一个表将近100个字段...一共10几个表.....手动建肯定不可能了
我是这样想的。
之前SP中into的表只是字段数据类型不对,名称都是对的。我只需要把原来的表的字段类型修改对了就行了。
恩,忽然感觉工作量小了很多有没有,哈哈。
我通过数据库 任务-&执行脚本 &把原SP into的表的结构导出来。
再把原系统用的表结构导出来。
对比两个文件把相应的字段类型改一下。
并记录下修改的字段,写出相应的SQL 语句进行修改。
我在测试数据库中 建了一个测试数据库test
把SP into的表通过导出文件建好。
让执行我整理的SQL 语句。
哈哈,我的工作是不是做完了?
明显没有....在我修改原来的SP 将select into 改成insert into 并执行的时候.....
竟然报错了....
SQL Server报告出错:&将数据类型 varchar 转换为 numeric 时出错。&
我靠,这是什么情况?
我改了很多decimal的...难道我一个一个去试试....
我还真一个一个去试了试。结果发现时DT_DAMT这个字段出错了。
难道是数据问题?数据中有不是数字的数据?
select DT_DAMT from
OracleDB.[dbo].OracleTB
where isnumeric(DT_DAMT )!=1
结果返回为空....
我去,都是数字啊。
这是什么情况?
难道长度超出了?
应该不会啊,我建的表中DT_DAMT字段是 decimal(18,6)类型。
并且同事写的SP中也是转化成了&decimal(18,6)
convert(varchar,convert(decimal(18,6),isnull(usd_amount,'0') * 100)) as DT_DAMT
(额。。。貌似还乘以了100.当时没注意到)
我看了一下原SP into表的DT_DAMT类型decimal(18,2)
&我靠&decimal(18,2)可以,我的decimal(18,6)就不行?
不过也没影响吧,都是decimal(18,*)的类型,小数点前面应该都是18位。
我之前真的是这么以为的。
于是我在执行了一下sql语句。
Select convert(decimal(18,2),isnull(LINE_AMOUNT,'0') ) as DT_DAMT
FROM OracleDB.[dbo].OracleTB
没报错....
Select convert(decimal(18,6),isnull(LINE_AMOUNT,'0') ) as DT_DAMT
FROM OracleDB.[dbo].OracleTB
竟然报错了
SQL Server报告出错:&将数据类型 varchar 转换为 numeric 时出错。&
于是我果断百度一下&Decimal&
Decimal 数据类型&介绍
Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部份以及小数部分的位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省储存空间,例如百分比使用decimal(4,2)即可。存储数据范围是:-10^38~10^38-1 的固定精度和小数位的数字。一个decimal类型的数据占用了2~17个字节。
decimal[ (p[ , s] )]
p (有效位数)
可储存的最大十进位数总数,小数点左右两侧都包括在内。有效位数必须是 1 至最大有效位数 38 之间的值。预设有效位数是 18。
s (小数位数)
小数点右侧所能储存的最大十进位数。小数位数必须是从 0 到 p 的值。只有在指定了有效位数时,才能指定小数位数。预设小数位数是 0;因此,0 &= s &= p。最大储存体大小会随著有效位数而不同。
Decimal(p,s)表示数值中共有n位数,其中整数p-s位,小数s位。例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。
decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。
ISNUMERIC 介绍
ISNUMERIC ( expression )
expression
要计算的表达式。
当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返回 0。返回值为 1 确保可以将 expression 转换为上述数字类型中的一种。
因此记录一下, 以便以后犯同样的错误。
延伸阅读:
SQLServer代理是所有实时数据库的核心。代理有很多不...
本教程为 李华明 编著的iOS-Cocos2d游戏开发系列教程:教程涵盖关于i......
专题主要学习DirectX的初级编程入门学习,对Directx11的入门及初学者有......
&面向对象的JavaScript&这一说法多少有些冗余,因为JavaScript 语言本......
Windows7系统专题 无论是升级操作系统、资料备份、加强资料的安全及管......SQL语句中要同时定义长度,精度,小数位数,怎样定义啊,举个例子教我下?谢啦_百度知道
SQL语句中要同时定义长度,精度,小数位数,怎样定义啊,举个例子教我下?谢啦
numeric用法好像一样decimal(a。b指定小数点右边可以存储的十进制数字的最大个数,最大精度38。小数位数必须是从 0 到 a之间的值。默认小数位数是 0,b)a指定指定小数点左边和右边可以存储的十进制数字的最大个数
其他类似问题
为您推荐:
sql语句的相关知识
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 excel小数位数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信