日期:2014-05-18  浏览次数:21796 次

将数据类型 varchar 转换为 numeric 时出错。
将数据类型   varchar   转换为   numeric   时出错。
这种情况出现时该怎么处理啊?

------解决方案--------------------
用isnumeric(字段名)判断后,再转换

------解决方案--------------------

--用isnumeric(字段名)判断后,再转换


select *,cast(字段名 as numeric(10,2))
from 表名
where isnumeric(字段名)=1
------解决方案--------------------
select * from 表名
where
isnumeric(字段名)=0--查不下不正确的值
处理一下再改
------解决方案--------------------
update 表名 set
balance=balance * cast(curr_code as decimal(16,2))
where isnumeric(curr_code)=1

------解决方案--------------------
wqplq() ( ) 信誉:100 Blog 加为好友 2007-04-10 16:05:38 得分: 0


还是不太懂
balance=balance*curr_code
这句要怎么转化呢?
balance是decimal(16,2)
curr_code是float类型的

----------
curr_code是float类型?


try


Select
balance=balance*Cast(curr_code As Numeric(10,2))
From
TableName
Where IsNumeric(curr_code) = 1
------解决方案--------------------
select balance=balance*cast(curr_code as decimal(16,2))
from det_item_bal,#all
where det_item_bal.item_code=#all.item_code and IsNumeric(curr_code) = 1
------解决方案--------------------
select balance=balance*cast(curr_code as decimal(16,2))
from det_item_bal,#all
where det_item_bal.item_code=#all.item_code
And IsNumeric(curr_code) = 1 --加上IsNumeric(curr_code) = 1


------解决方案--------------------
ISNUMERIC
決定運算式是否為有效的數值型別。

語法
ISNUMERIC ( expression )


------解决方案--------------------
wqplq() ( ) 信誉:100 Blog 加为好友 2007-04-10 16:17:56 得分: 0


加上IsNumeric(curr_code) = 1
的作用是什么呢?



-----
就是將不是有效數值的數據剔除條,否則和balance計算的時候就會出錯。
------解决方案--------------------
--curr_code是哪個表的?
--使用
Select * From det_item_bal Where IsNumeric(curr_code) = 0
--或者
Select * From #all Where IsNumeric(curr_code) = 0
--將非法的數值查詢出來,手動修改掉,然後再使用
select balance=balance*cast(curr_code as decimal(16,2))
from det_item_bal,#all
where det_item_bal.item_code=#all.item_code
--查詢