如何把SQL server 表里插入转换科学计数法的方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把SQL server 表里插入转换科学计数法的方法。相关的知识,希望对你有一定的参考价值。

有t1和t2两个表 t1就一个字段 “单据编号”类型是varchar 里面保存的是科学计数法后的值:3.09E+03 ,3.10E+03 。
现在想在t2表新建一列,如何写语句呢? t2那一列又该定义什么类型呢?

参考技术A 为什么要存储为科学计数法呢?
一般这是显示设置的问题,将sql查询结果设置number fileds to char,这样查询t1字段就不会显示科学计数法了,t2表该建什么字段就建什么字段
参考技术B 这个纯粹就是数据库设计者脑残啊,单据编号直接用字符型就完了,给存成这样,写SQL 查询语句都不好写 参考技术C 存储为科学计数法是设计需要吗?一般没什么用吧

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)=N1.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)=N1.23456789E+5

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

结果如下:

技术图片

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

 

以上是关于如何把SQL server 表里插入转换科学计数法的方法。的主要内容,如果未能解决你的问题,请参考以下文章

把excel导入sql server数据库日期类型变成科学计数法怎么办

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

在没有科学计数法的 SQL Server 中将 float 转换为 varchar

SQL Server:将FLOAT转换为NVARCHAR,最高精度,无需科学记数法

将excel数据导入sql中,出现科学计数法

SQL Server 怎么用存触发器实现从一个表里查询数据,然后插入到另一个表里