Sql-Server

如果數據類型為浮點數,如何獲取具有 IE 的數字?

  • June 5, 2022

我在 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使用自定義數字格式字元串返回。

db<>小提琴展示


你的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

…沒有像希望的那樣工作,因為整個表達式的結果必須有一個單一的數據類型。您試圖有時返回 anumeric(37,15)和其他時間double precision(的同義詞float)。

SQL Server 根據數據類型優先規則解決類型不兼容問題。由於float具有比decimal/更高的優先級numeric,因此numeric(37,15)隱式轉換為float. 因此,整個CASE表達式的結果是float

Notenumbers like '%E-%'還包含不兼容的類型(floatvarchar)。這會導致隱式轉換,因為LIKE運算符需要字元串。該float列轉換為varchar(23).

引用自:https://dba.stackexchange.com/questions/312953