如果數據類型為浮點數,如何獲取具有 IE 的數字?
我在 sql server 2017 上工作,我在將數據保存為浮點數據類型時遇到問題,它顯示為
IE
那麼如何獲取僅在浮點數據類型上顯示為 IE 的數據
CREATE TABLE #TestTable ( Numbers float ) ; INSERT INTO #TestTable (Numbers) VALUES (0.0000001) ,(0.00001) ,(0.0000001) ,(0.00001) ,(0.0000001) ,(0.00001) ,(0.0000001) ,(0.00001) ,(10000000) ,(8) ,(1) ,(10000000) ,(14) ,(10000000) ,(1005)
預期結果
我嘗試了但不轉換 IE 為什麼
SELECT case when numbers like '%E-%' then cast(Numbers as numeric(37,15)) else cast(numbers as double precision) end as castedvalue FROM #TestTable
在上面執行查詢後,它不會轉換或顯示 IE 的數據,它給我下面的結果
castedvalue 1E-07 1E-05 1E-07 1E-05 1E-07 1E-05 1E-07 1E-05 10000000 8 1 10000000 14 10000000 1005
應用上述查詢後的預期結果必須是
您不能在查詢中這樣做,因為數據的格式是由客戶端應用程序完成的。
或者,更具體地說,您需要針對您的特定客戶端應用程序以及該應用程序如何決定是否使用科學記數法來定制查詢。
舉個例子:
SELECT CAST(0.0002 AS float)
以上是 MS 的各種工具中不同的格式:
SSMS:
0,0002
SQLCMD:
2.0000000000000001E-4
廣告:
0,0002
例如,假設您使用 SSMS。然後,您必須確定 SSMS 使用科學記數法與不使用科學記數法的界限。即,在決定使用科學記數法之前,您必須擁有多大/小數。我懷疑這是否已記錄在案,因此您需要進行反複試驗。基於此,您可以在 WHERE 子句中使用這些截止值。並且,請注意 SSMS 可能會更改其格式規則…
第一個預期輸出:
SELECT Numbers FROM #TestTable WHERE Numbers < 1e0;
第二個預期輸出:
SELECT FORMAT(Numbers, '0.########') FROM #TestTable;
請注意,這
nvarchar
使用自定義數字格式字元串返回。你的
CASE
表情:SELECT case WHEN numbers like '%E-%' then cast(Numbers as numeric(37,15)) ELSE cast(numbers as double precision) end as castedvalue FROM #TestTable
…沒有像希望的那樣工作,因為整個表達式的結果必須有一個單一的數據類型。您試圖有時返回 a
numeric(37,15)
和其他時間double precision
(的同義詞float
)。SQL Server 根據數據類型優先規則解決類型不兼容問題。由於
float
具有比decimal
/更高的優先級numeric
,因此numeric(37,15)
隱式轉換為float
. 因此,整個CASE
表達式的結果是float
。Note
numbers like '%E-%'
還包含不兼容的類型(float
和varchar
)。這會導致隱式轉換,因為LIKE
運算符需要字元串。該float
列轉換為varchar(23)
.