2015-02-11 90 views
2

有人能解釋爲什麼LEFT的結果不同嗎?適用於:LEFT對於相同的值返回不同的結果

Declare @f as float 
set @f = 40456510. 

select LEFT(cast(@f as float), LEN(4045.)), LEFT(404565., LEN(4045.)) 

我:

 | 
------------ 
4.04 | 4045 

是否有這將導致此默認投? Fiddle SQL

回答

3

當您在FLOAT值上調用LEFT(...)時,您將其轉換爲數字的字符串表示形式,因爲它是字符串函數。如果值轉換爲一個varchar例如,你會看到輸出是什麼:

SELECT CAST(CAST(@f as float) AS VARCHAR(100)) 

你得到:'4.04565e+007'

所以第4個那的字符是:'4.04'

+0

你現在爲什麼?如果不是,你知道如何獲得前N個數字 – orim 2015-02-11 14:40:19

+0

@orim你只對整數有興趣或者如果他們在場,你想要小數位嗎?從你的輸入和'LEN(4045)'你試圖達到的目標並不清楚。 – Tanner 2015-02-11 14:46:02

+0

我有INT存儲在FLOAT的列(不是我的設計,我不能改變它)。我創建了一個示例http://sqlfiddle.com/#!3/6f1d86/5 – orim 2015-02-11 14:53:52

0

第一個是取指數表示的左4個字符。爲什麼我不知道。

您正在將一個字符串函數[Left()]應用於float變量。

相關問題