错误将varchar转换为十进制

时间:2016-11-18 12:08:04

标签: sql-server

我在SQL Server 2008中有这个查询:

select ID,CAST(replace(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7),',','.')AS DECIMAL (16,7)),    
from T1

这是返回施法错误。

为了找出问题所在,我尝试了以下方法:

select ID,SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7),
isnumeric(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7))    
from T1
where isnumeric(SUBSTRING(LTRIM([value]),1,8)+'.'+SUBSTRING(LTRIM([value]),9,7))<>1

但它返回0行,然后我猜所有值都可以将它们转换为十进制,但是当我运行第一个查询时它失败了。

我是否想知道造成问题的事情?

P.D:值是varchar数据类型。

1 个答案:

答案 0 :(得分:0)

如果你使用2012,那么你可以使用Try_Convert()

但是,有一种方法可以通过使用CASE语句使其与2008一起使用。这是因为CASE在找到匹配时停止评估。

这是Varchar到Int的一个简单示例,但您可以轻松地将其调整为Decimal。

CASE WHEN [value] LIKE '%[^0-9]%' THEN [value]
ELSE Convert(varchar(20), CAST([value] as INT))
END