SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败

Posted

技术标签:

【中文标题】SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败【英文标题】:SQL Server 2005 : Converting varchar value '1.23E-4' to decimal fails 【发布时间】:2010-01-27 17:32:17 【问题描述】:
declare @a varchar(40)
set @a='1.23e-4'
declare @b decimal(27,12)

if isnumeric(@a) =1
begin

    select @b=cast(@a as decimal(27,12))

end
else
begin
    select @b=-1
end

select @b

在 SQL 2005 环境下执行上述 sql 代码时出现以下错误。

将数据类型 varchar 转换为数值时出错

有人知道为什么吗?

谢谢。

【问题讨论】:

【参考方案1】:
SELECT  @b = CONVERT(REAL, @a, 2)

科学记数法仅适用于 FLOATREAL

【讨论】:

【参考方案2】:

首先通过浮动进行投射。

SQL 对十进制非常严格

例如

SELECT CAST('' AS float), CAST('' AS int), CAST('' AS float) --0
SELECT CAST('' AS decimal) --error

【讨论】:

以上是关于SQL Server 2005:将 varchar 值“1.23E-4”转换为十进制失败的主要内容,如果未能解决你的问题,请参考以下文章

varchar() 和 nvarchar() 之间奇怪的 SQL Server 2005 排序规则差异

日文符号“?”插入sql-server2005乱码问题

从 SQL Server 2005 中的用户定义函数中“捕获”错误

将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

工作查询优化 (SQL Server 2005)

SQL Server 2005 表太大