我试图在表达式中找到指数值。这是非常简单的,但对于某些人来说,结果并没有在屏幕上显示指数值,而是评估为科学数字。
以下是我正在使用的代码
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'
以上查询是
即使两个变量的总和没有显示指数值,但上面的查询表明它包含一个指数值。
有人可以解释一下这种现象。
由于
答案 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的开头开始。