关于数据转换的问题 select convert(nvarchar(255),cast(cast(12345678912.12 as float) as decimal(15,2))) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 测试是对的Select Cast(12345678912.12 as nvarchar(20)) --你是什么数据库? 我的电脑中测试没有问题:select convert(nvarchar(255),12345678912.12) --结果:-----------------------12345678912.12(所影响的行数为 1 行) 上面语句中:cast(12345678912.12 as float) 只是为了说明问题,实际上不用这个转换。 --2位小数:select convert(nvarchar, cast(12345678912.12 as money), 0)--4位小数:select convert(nvarchar, cast(12345678912.12 as money), 2)--只是不知道你的float转成money时会不会溢出?/*货币数据值介于 -2^63 (-922337203685477.5808) 与 2^63 - 1 (+922337203685477.5807) 之间,精确到货币单位的千分之十。存储大小为 8 个字节。*/ 不好意思 我的 12345678912.12 的数据 是在一个表中 其中有一个float类型的列12345678912.12 是这个列的一个 数据 select convert(nvarchar(255),matnr) from basic出来的数据就是1.23457e+010 我用的是 sql server 2000+sp3 中文版 os: xp pro 中文版 convert(nvarchar(255),convert(numeric(30,2),字段名)) --先转换成decimal,再转换成字符型就可以了.declare @a floatset @a=12345678912.12select convert(varchar,cast(@a as decimal(20,2))) 不过这办法有局限,只能是这个列所有值的小数位固定为2位如果把numeric(30,2)的小数位设足够长,如numeric(30,5),那么得到的字符型数据会有多余的0,如'12345678912.12000' 问题是解决了 但是我还想知道为什么不能直接用convert(nvarchar(255),matnr)转换 而要先转换成decimal或者 numeric 高手们有没有更好的办法,关注ing float类型与decimal、float类型数据在数据库中的存储形式不一样的 float 浮点数据,为近似值所以保存的数据不能够精度还原,从而导致在转换为字符型时出现这个问题. --测试:declare @a floatset @a=12345678912.12select @a--结果:12345678912.120001/*--从结果就可以看到,取出的数据与原来保存的数据有所偏差联机帮助上也说明了这一点:float 和 real用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。--* 谢谢 zjcxc(邹建) 我还有一个问题 这个float列 是我从excel文件中导入的 excel文件有一个列的内容全是数字,但是我设置成文本型 我希望导入sql server以后变成nvarchar类型 但是导入以后确是float类型请问怎么做啊 应为我有很多excel都是这样 要改工作量很大 请问 能不能在 sql server 读excel的时候就进行转换 请教服务器角色,登录,角色,用户概念的区别? 大家帮我一个忙 才学数据库 ~~~~~~~~~~~~求助~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C/S向B/S转型帮我推荐一下 怎样该字段的类型和长度 sql 存储过程 exec 与 sp_executesql 区别 大侠帮帮忙,insert 队列的实现 高手请进 求高手指点!随机抽样问题!(急) 关于创建一个触发器 SQL查询帮助~~~~ SQL Server2000 导入和导出EXECL表时出错?
Select Cast(12345678912.12 as nvarchar(20))
select convert(nvarchar(255),12345678912.12) --结果:
-----------------------
12345678912.12(所影响的行数为 1 行)
上面语句中:cast(12345678912.12 as float) 只是为了说明问题,实际上不用这个转换。
select convert(nvarchar, cast(12345678912.12 as money), 0)
--4位小数:
select convert(nvarchar, cast(12345678912.12 as money), 2)--只是不知道你的float转成money时会不会溢出?
/*
货币数据值介于 -2^63 (-922337203685477.5808) 与 2^63 - 1 (+922337203685477.5807) 之间,精确到货币单位的千分之十。存储大小为 8 个字节。
*/
其中有一个float类型的列
12345678912.12 是这个列的一个 数据
select convert(nvarchar(255),matnr) from basic
出来的数据就是
1.23457e+010
set @a=12345678912.12select convert(varchar,cast(@a as decimal(20,2)))
如果把numeric(30,2)的小数位设足够长,如numeric(30,5),那么得到的字符型数据会有多余的0,如'12345678912.12000'
所以保存的数据不能够精度还原,从而导致在转换为字符型时出现这个问题.
set @a=12345678912.12select @a--结果:12345678912.120001/*--从结果就可以看到,取出的数据与原来保存的数据有所偏差联机帮助上也说明了这一点:
float 和 real
用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。--*
这个float列 是我从excel文件中导入的
excel文件有一个列的内容全是数字,但是我设置成文本型
我希望导入sql server以后变成nvarchar类型 但是导入以后确是float类型
请问怎么做啊
请问 能不能在 sql server 读excel的时候就进行转换