关于SQL Server中将数值类型转换为字符串的问题

今天在把一些数据导入到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

输出的结果是使用科学计数法来表示的,再看看可否通过指定转换样式来指定不使用科学计数法呢?帮助文档中说到floatreal 转换为字符数据时的 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
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将SQL Server中的数字换为字符串,可以使用CONVERT函数。这个函数可以将一个数据类型转换为另一个数据类型。在这种情况下,我们可以使用CONVERT函数将数值换为字符串。 例如,如果你有一个整数字段i,你可以使用以下SQL语句将其换为字符串: SELECT CONVERT(varchar(20), i) AS ConvertedString FROM YourTable; 这将把整数字段i换为一个最大长度为20的字符串。你可以根据需要调整长度。 如果你想指定一个分隔符将多个数字拼接成一个字符串,你可以使用STRING_AGG函数(适用于SQL Server 2017及更高版本): SELECT STRING_AGG(CONVERT(varchar(20), i), ',') AS ConcatenatedString FROM YourTable; 这将把多个数字换为字符串,并使用逗号作为分隔符连接它们。 请注意,这些示例中的YourTable是你的表名,你需要将其替换为你实际使用的表名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SQL Server把某个字段的数据用一条语句换成字符串](https://download.csdn.net/download/weixin_38653296/12830655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [关于SQL Server中将数值类型转换字符串问题](https://blog.csdn.net/studyzy/article/details/4491127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值