0

我有一个用于解析的临时表,#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.00and where q.PARSEAMT = convert(decimal(18,2),0)

我在比较中做错了什么?

4

1 回答 1

0

我打算建议您将 PARSEAMT 选择到另一个临时表/表变量中,但我可以从您的评论中看到您已经这样做了。

出于兴趣,以下结果是什么?

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 
于 2012-04-26T05:20:24.887 回答