在SQL Server中查找Phantom Exponential值

时间:2017-05-29 07:34:10

标签: sql-server

我试图在表达式中找到指数值。这是非常简单的,但对于某些人来说,结果并没有在屏幕上显示指数值,而是评估为科学数字。

以下是我正在使用的代码

   declare @i as float
   declare @j as float
   set @i = 100
   set @j = 3700000.00

   select
   Cast((Isnull(@i, 0) + Isnull(@j, 0))  AS FLOAT) as 'TheSum',
    CASE 
    WHEN 
    CHARINDEX('E',  Cast((Isnull(@i, 0) + Isnull(@j, 0))  AS FLOAT)) > 0
     THEN '0' -- The expression have an exponential value
    ELSE  Cast((Isnull(@i, 0) + Isnull(@j, 0))  AS FLOAT)
    END AS 'Value'

以上查询是

Rsult

即使两个变量的总和没有显示指数值,但上面的查询表明它包含一个指数值。

Here is the link for the code

有人可以解释一下这种现象。

由于

1 个答案:

答案 0 :(得分:1)

如果您尝试运行以下查询

,则很明显
   select CAST( Cast((Isnull(@i, 0) + Isnull(@j, 0))  AS FLOAT) AS VARCHAR(100))

此查询的输出是

3.7001e+006

这是因为CHARINDEX函数需要将字符输入到第二个参数并隐式地将Cast((Isnull(@i, 0) + Isnull(@j, 0)) AS FLOAT)强制转换为字符表达式(3.7001e+006),其中包含7个字符的e字符

请参阅MSDN documentation for CHARINDEX函数说明此内容

  

- SQL Server语法,Azure SQL数据库,Azure SQL数据仓库,并行数据仓库

     

CHARINDEX(expressionToFind,expressionToSearch [,start_location]   )

     

expressionToFind   是包含序列的字符表达式   被发现。 expressionToFind限制为8000个字符。

     

expressionToSearch 是一个要搜索的字符表达式。

     

start_location 是搜索的整数或bigint表达式   开始。如果未指定start_location,则为负数,或   为0时,搜索从expressionToSearch的开头开始。