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)
科学记数法仅适用于 FLOAT
和 REAL
。
【讨论】:
【参考方案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 Server 2005 中的用户定义函数中“捕获”错误
将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围