2016-11-18 94 views
0

我在SQL Server 2008中有这个疑问:错误将varchar为十进制

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:Value是varchar数据类型。

+0

您是否尝试过在第一个查询中找到失败的实际行? –

+2

提供样本数据。 “价值”的数据类型是什么?还提供了什么是抛出的错误? – Viki888

+0

@ LasseV.Karlsen是的,正如我上面解释的那样,我正在尝试使用第二个查询 – Maik

回答

0

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

但是,有一种方式来获得这种通过使用CASE语句与2008年的工作。这是有效的,因为CASE在找到匹配时停止评估。

下面是Varchar to Int的一个简单示例,但您可以轻松地将其适用于Decimal。

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

我更改为十进制转换为Int,但select返回没有问题的所有行:S – Maik

相关问题