【发布时间】:2011-07-19 15:43:53
【问题描述】:
由于我无法帮助的原因,我有一个包含如下数据的 varchar 列:820.0E-12, 10.0E+00。
我想要数值。所以我有这个 test 有效的查询:
declare @d varchar(256)
set @d = '820.0E-12'
select
CASE
WHEN @d like '%E-%' THEN LTRIM(RTRIM(CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))))
WHEN @d like '%E+%' THEN NULL
ELSE @d
END
我的结果是:0.000000000820000000(这是我想要的)
我更改我的 SQL 以解释数字 > 0 (10.0E+00),如下所示:
WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)
我的结果变为:8.2E-10(这不是我想要的)
如果我更改 @d='10.0E+00',我会得到 10(这是正确的)。
我有一个观点,我需要从 varchar 列生成输出,该列包含科学记数法,转换/转换为十进制 (18,18)。
谁能告诉我这里发生了什么疯狂的事情?
或者,也许我的问题应该是,如何在视图中将 varchar 科学记数法列转换/转换为十进制输出?
我的第一个 WHEN 语句适用于数字 0。当我更改第二个 WHEN 以包含 CAST 时,它会中断/给出错误的结果。
【问题讨论】:
-
您发布的代码对我来说工作正常...当我更改为
E+12时,CASE 的输出是820000000000000
标签: sql sql-server-2008