今天在把一些数据导入到SQL Server的时候遇到有个列被导入成float类型,而我实际需要的是varchar类型,所以要进行类型转换,转换时遇到了一点问题,所以写这篇博客记录一下。

SQL Server中的数值类型分为两种,一种是精确的数值类型,具体的数据类型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,这些数据类型能够精确的表明某以数值;另一种是近似的数值类型,具体就是float和real。浮点数据为近似值,因此,并非数据类型范围内的所有值都能精确地表示。

有些时候我们需要将这些数值类型转换为字符串类型,用到的转换函数就是cast和convert,这两个函数的作用都是进行类型转换,只不过语法格式不同。据说在转换时还是有一定的区别的,不过我个人更习惯于使用convert函数,应该这个函数一方面更像是个函数的语法,另一方面在做时间和数值转换成字符串时还可以指定转换的格式。

对于精确数值的数据类型,转换出来的字符串就是我们存储的数值。比如: declare @i int

set @i=123456789

print 'test:'+convert(varchar(20),@i)

输出就是:test:123456789

而如果对于近似数值的数据类型,那么可就没有那么简单了。

declare @i float

set @i=123456789

print 'test:'+convert(varchar(20),@i)

输出结果:test:1.23457e+008

输出的结果是使用科学计数法来表示的,再看看可否通过指定转换样式来指定不使用科学计数法呢?帮助文档中说到float 或 real 转换为字符数据时的 style值:

0(默认值)最大为 6 位数。根据需要使用科学记数法。

1始终为 8 位值。始终使用科学记数法。

2始终为 16 位值。始终使用科学记数法。

我们的值是123456789,超过了6位数.所以不管是0还是1,2结果都会使用科学计数法来表示。那么要怎么样才能将我们的数据不转换成科学计数法而输出呢?比较简单的办法就是将近似数据转换为精确数据,然后再将精确数据转换成字符串。

同样以上面的例子为例, 进行两次数据类型的转换如下:

declare @i float

set @i=123456789

print 'test:'+convert(varchar(20),convert(int,@i))

输出:test:123456789

如果是有小数,那么我们要转换出小数位的话,可以转换成decimal,转换出的小数位数在定义decimal时指定。比如要输出4位小数,那么转换代码是:

declare @i float

set @i=123456789.12

print 'test:'+convert(varchar(20),convert(decimal(18,4),@i))

输出:test:123456789.1200

今天在把一些数据导入到SQL Server的时候遇到有个列被导入成float类型,而我实际需要的是varchar类型,所以要进行类型转换,转换时遇到了一点问题,所以写这篇博客记录一下。SQL Server中的数值类型分为两种,一种是精确的数值类型,具体的数据类型有:bit、tinyint、smallint、int、bigint、smallmoney、money和decimal,这些数据类型能够精确...
SQL Server 中实际上只有两种小数 数值 类型,分别是float(近似 数值 )和 decimal (精确 数值 ),这两种类型能表示所有的小数 数值 类型。 float(近似 数值 类型) float表示的是近似 数值 ,存在一定的精度缺失。 float(n) 这里的n是以科学计数法存储浮点数尾数的位数,因此此参数决定了精度和存储的大小。其是可选的,默认值是53,即float等价于float(53),占用8bytes。如果指定了n,则它必须是介于1至53之间的值。实际上,虽然n的取值范围定义是1至53,但实际上float只能表示float(53)和float(24)两种类型,分别占用8bytes和4byte
有时客户需要流水数据,当导出为excel的时候,客户编号等很长数字的栏位,被excel变成科学记数法,无法正常查看。 因此,需要将Oracle/My SQL 中的 decimal /int 转 varchar,这样在excel中就可以放心查看了。 Oracle的转换方法: 1.新建表,并插入数据 drop table test purge;create table test(id number);...
功能描述:载入一些数据,然后将其中的 字符串 转换为数字。 注意:我这里使用,是一种one-hot的思想,或者可以理解为词袋或二进制。例如:笔有三类:钢笔、铅笔、毛笔。那么就可以用三位是二进制数来表示,那么钢笔100,铅笔010,毛笔001. 这里有个很明显的缺点,当你的类型很多时,数据就会很稀疏。 先看源码:(数据和转换请看我上一篇博文) #判断是否为数字 def is_number(s): float(s) return True except Va
1.可以传递给 Decimal 整型或者 字符串 参数,但不能是浮点数据,因为浮点数据本身就不准确。 2.要从浮点数据转换为 Decimal 类型 from decimal import * Decimal .from_float(12.222) # 结果为 Decimal ('12.2219999999999995...
用 to String : public static string ReadExchangeRate( string fromCurrencyCode, string toCurrencyCode) BaseCurrency = fromCurrencyCode; decimal conversion = PreformConversion(toCurrencyCode); 文章目录解决python查询数据库将 Decimal 转换为 字符串 类型前言 在接口自动化测试中,会与数据库进行交互,查询数据库的字段值,但是返回的是 Decimal 类型,python中没有此类型的数据,所以我们要对数据类型进行转换 CAST(member.leave_amount as CHAR) 此函数用来将 Decimal 转换为 字符串 类型 select CAST(表名 as CHAR) as 别名 from 表名 where id=字段值;
我们平常写 SQL 中遇到过滤空值或者NULL值的处理,尤其是在非关系型数据库中没有唯一键和默认值的约束要求,很容易出现NULL值或者空值。很多时候我们总是会出现困扰,到底是该使用=' ' 还是用 is NULL呢? 另外我们一个多表JOIN的查询在这个 SQL 上跑的好好的,一旦换了一个 SQL 执行引擎就提示我们JOIN两边的数据类型不一致,这些都是为什么呢? 今天就带大家一起领略一下各类 SQL 中空值以及 类型转换 那些坑。 空值和NULL值 一、底层字段类型为字符型( string ,varch...
今天群里一个哥们问我my sql 怎么将 decimal 转成varchar,经过查阅资料发现,my sql 好像不能将 decimal 直接 转换成 varchar,但是可以转成char,原文链接:http://stackoverflow.com/questions/5114959/my sql -casting-from- decimal -to- string 类似于这样的: SEL...
在DB2中 类型转换 可以用CAST函数,那么CAST配合CHAR使用应该可以 转换成 字符串 ,但CAST在将 DECIMAL 转换 字符串 时会有的小 问题 : select char(cast(9.9 as decimal (8,2))) from sysibm.sysdummy1; 查询结果:000009.90  因为 decimal (8,2)的整数部分为6为,用char函数会不足位补0。 这是我们可以考虑使