我在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数据类型。
答案 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