2016-10-20 42 views
-1

我遇到什麼,當我通過任LTRIMRTRIM傳遞float值我會形容爲完全意外的行爲:LTRIM和RTRIM期截斷浮點數

CREATE TABLE MyTable 
(MyCol float null) 

INSERT MyTable 
values (11.7333335876465) 

SELECT MyCol, 
     RTRIM(LTRIM(MyCol)) lr, 
     LTRIM(MyCol) l, 
     RTRIM(MyCol) r 
FROM MyTable 

其中給出了以下結果:

MyCol    | lr  | l  | r 
-------------------------------------------- 
11.7333335876465 | 11.7333 | 11.7333 | 11.7333 

我在SQL Server 2014和2016上觀察到相同的行爲。

現在,我的理解是LTRIMRTRIM應該從一個值中剝離空白空間 - 而不是將其轉換爲/截斷它。

有沒有人知道這裏發生了什麼?


只是爲了解釋這個背景。我使用一組C#POCO的屬性生成SQL查詢(結果將用於生成MD5哈希,然後將其與Oracle表中的等效值進行比較),並且爲了方便起見,使用LTRIM/RTRIM 。

+2

看起來是轉換爲字符串以滿足功能要求。沒有什麼奇怪的 –

+4

爲什麼你試圖修剪空白'float數據類型呢?永遠不會有任何。這隻能應用於字符串表示。 –

+2

因此,當您使用具有浮點值的字符串函數時,您會得到意想不到的行爲。那麼不要這樣做。 –

回答

1

也許你可以使用格式()代替

Declare @F float = 11.7333335876465 
Select format(@F,'#.##############') 

返回

11.7333335876465