日期:2014-05-17  浏览次数:20483 次

关于varchar转numeric(15,2)问题
数据库中存了数据为 varchar类型 内容基本上为"100.00/次" 或者 "200.00/人"
在查询时将"/截断" 将 / 以前的内容存入保存为 numeric(15,2) 型.

错误:从数据类型 varchar 转换为 numeric 时出错。

求解...

SELECT
replace(newid(), '-', ''),
e.equip_id,
e.equip_name,
CASE
WHEN s.project_fee IS NULL THEN 0
ELSE cast(SUBSTRING (s.project_fee,0,patindex('%/%', s.project_fee)) as decimal(15,2)) --这里的转换有问题
END AS project_fee
FROM
sheetEquip s
LEFT JOIN ams_equip e ON e.equip_no = s.equip_no

------解决方案--------------------
where isnumeric(SUBSTRING (s.project_fee,0,patindex('%/%', s.project_fee)))=0
那就查一下哪些数据有问题
------解决方案--------------------
引用:
引用:cast(SUBSTRING (s.project_fee,1,patindex('%/%', s.project_fee)-1)

我单独用SUBSTRING (s.project_fee,0,patindex('%/%', s.project_fee))来截取字符串显示结果的时候 字符串的截取是正确的.是转换出的问题,和位置无关.……


确实不是位置问题,应该是数据问题,检查一下表的数据:
select top 1 project_fee from sheetEquip where isnumeric( SUBSTRING (project_fee,0,patindex('%/%', project_fee)) ) = 0