2015-02-11 92 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变量。

相关问题