我有一个用于解析的临时表#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.00
和where q.PARSEAMT = convert(decimal(18,2),0)
。
在比较中我做错了什么?
答案 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