当我们将Excel的数据导入SQL Server时,如果用SQL Server的字符串类型(VARCHAR和NVARCHAR等)来存储从Excel导入的数字,有时候这些数字会变成科学记数法字符串(例如'1.23E+10'实际上是'12300000000')。

这并不是我们想要的结果,我们希望从Excel导入的数字还是数字字符串,而不是科学记数法。

在SQL Server中我们可以通过这个思路来将 科学记数法字符串 变为 数字字符串

  1. 首先将 科学记数法字符串 转换为 FLOAT类型
  2. 接着将 FLOAT类型 转换为 DECIMAL类型(DECIMAL类型声明的小数位数,就是需要保留的小数位数)
  3. 将 DECIMAL类型 转换为 字符串类型(VARCHAR和NVARCHAR等)

这个思路的核心就是DECIMAL类型,因为DECIMAL类型在SQL Server中不会表示为科学记数法,有可能你会问,为什么转换为FLOAT类型不行呢?原因是在SQL Server中FLOAT类型也有可能会出现科学记数法,点击这里了解

我们下面就举个例子,将 科学记数法字符串 '1.23E+10' 转换为  整数字符串 '12300000000':

DECLARE @Number NVARCHAR(50)=N'1.23E+10'

SELECT CONVERT(NVARCHAR(50),CONVERT(DECIMAL(28,0),CONVERT(FLOAT,@Number)))

结果如下:

由于我们知道该科学记数法是一个整数,所以我们声明转换为DECIMAL类型时,声明的是DECIMAL(28,0),小数位是0,也就是不保留小数位。

下面我们再来看一个例子,将 科学记数法字符串 '1.23456789E+5' 转换为  保留两位小数的字符串 '123456.79':

DECLARE @Number NVARCHAR(50)=N'1.23456789E+5'

SELECT CONVERT(NVARCHAR(50),CONVERT(DECIMAL(28,2),CONVERT(FLOAT,@Number)))

结果如下:

由于我们知道该科学记数法是一个小数,所以我们声明转换为DECIMAL类型时,声明的是DECIMAL(28,2),小数位是2,也就是保留两位小数。

最新文章

  1. C# Listview 数据绑定
  2. mysql 导出批量导出表数据 (程序)
  3. NHibernate系列文章八:NHibernate对象一级缓存
  4. 用SQL语句,删除掉重复项只保留一条
  5. vmware Esxi 更换管理网卡IP
  6. javascript的队列,优先队列,循环队列
  7. HeadFirst 12 (web应用安全)
  8. Multi-Device Hybrid Apps for Visual Studio CTP2.0
  9. linux crontab 命令
  10. Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据
  11. js写的复制功能,只支持IE
  12. 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)
  13. UVa 11121 - Base -2
  14. corosync集群的选举算法
  15. 自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)
  16. js 防抖 debounce 与 节流 throttle
  17. Java学习笔记:输入、输出数据
  18. SoapUI Pro Project Solution Collection-Test Step Object
  19. golang 创建一个简单的广播echo服务器
  20. Qt ------ 自定义QVector<T>中的T

热门文章

  1. Flink流式计算
  2. 开放API接口安全处理!
  3. javascript打开窗口
  4. 借助模板类自动实现COM连接点接收器(Sink)更新
  5. Python基础B(数据类型----交互)
  6. 原生ajax分页,无刷新分页,最简化。超简单,代码最少
  7. Splay的基本操作(插入/删除,查询)
  8. sass、less异同
  9. 在非gnome系桌面环境下运行deepin-wine tim的错误解决
  10. Spring Boot 2.2.1 发布,一个有点坑的版本!