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,也就是保留兩位小數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM