成功转换为十进制后,“将varchar转换为数据类型数字”错误(18,2)

时间:2012-04-26 01:14:48

标签: sql-server sql-server-2008 type-conversion

我有一个用于解析的临时表#rp

#rp包含nvarchar(max)#rp.col8,其中包含两位小数位的正数和负数,例如`1234.26' 。

我能够运行以下查询并输出一组转换后的值:

select * from
(
    select CONVERT(decimal(18,2),rp.col8) as PARSEAMT
    from #rp

    where
    --#rp filtering criteria
)q  

但是,当我尝试以下列方式查询PARSEAMT = 0时,我得到标准的'8114,将数据类型varchar转换为数字时出错。':

select * from
(
    select CONVERT(decimal(18,2),col8) as PARSEAMT
    from #rp

    where
    --#rp filtering criteria
)q  
where q.PARSEAMT = 0

如果没有where子句,查询运行正常并生成预期值。

我还尝试了其他条款,例如where q.PARSEAMT = 0.00where q.PARSEAMT = convert(decimal(18,2),0)

在比较中我做错了什么?

1 个答案:

答案 0 :(得分:0)

我打算建议你选择PARSEAMT到另一个temp-table / table-variable中,但我可以看到你已经从你的评论中做到了。

出于兴趣,以下产生了什么?

select 
    col8
from
    #rp
where
    -- ISNUMERIC returns 1 when the input expression evaluates to a valid 
    -- numeric data type; otherwise it returns 0. Valid numeric data types 
    -- include the following:
    isnumeric(col8) <> 1