• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

SQL Server中如何把 科学记数法字符串 变为 数字字符串

当我们将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,也就是保留两位小数。

 

posted @ 2019-07-09 21:41  PowerCoder  阅读(10722)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3