當我們將Excel的數據導入SQL Server時,如果用SQL Server的字符串類型(VARCHAR和NVARCHAR等)來存儲從Excel導入的數字,有時候這些數字會變成科學記數法字符串(例如'1.23E+10'實際上是'12300000000')。
這並不是我們想要的結果,我們希望從Excel導入的數字還是數字字符串,而不是科學記數法。
在SQL Server中我們可以通過這個思路來將 科學記數法字符串 變為 數字字符串:
- 首先將 科學記數法字符串 轉換為 FLOAT類型
- 接着將 FLOAT類型 轉換為 DECIMAL類型(DECIMAL類型聲明的小數位數,就是需要保留的小數位數)
- 將 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,也就是保留兩位小數。