积极答复者
转换SQL某个字段遇到的问题

问题
-
sql数据库中我有个列monthRent,这个列是nvarchar(50) 类型的,但看起来都像数字,如:123.00这种格式,我做了个需要用NextYearIncome(int类型)来除以MonthRent(nvarchar(50))的触发器,见代码1,错误见图,图中标记红框的部分为引发错误的几个字段1。我测试了转换代码2,可以转换,但是用到触发器中就不行,我搞不懂这是怎么回事!?
-----------------------------------代码1------------------------------------
(case when monthrent<>0 then dateadd(mm,11+nextyearincome/convert(numeric(18),monthrent), MonthRentPaidDate01) else dateadd(mm,11, MonthRentPaidDate01) end)
---------------------------------------------------代码2-------------------------------------------------
declare @a nvarchar(50) set @a=1020.00 select convert (numeric(18),@a)
-----------------------------------图1--------------------------------------
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
- 已编辑 linjiangxian11 2012年10月19日 7:28
答案
-
- 已标记为答案 linjiangxian11 2012年10月22日 9:07
全部回复
-
- 已标记为答案 linjiangxian11 2012年10月22日 9:07
-
不知道这样行不
DECLARE @a NVARCHAR(50) DECLARE @b NVARCHAR(50) DECLARE @c NVARCHAR(50) DECLARE @d INT DECLARE @e INT SET @a='123/542.01' SELECT @b=SUBSTRING(@a,1,PATINDEX('%/%',@a)-1) SELECT @b SELECT @c=SUBSTRING(@a,PATINDEX('%/%',@a)+1,LEN(@a)-PATINDEX('%/%',@a)) SELECT @c SELECT @d=CAST(CAST(@c AS numeric(18,2)) AS INT) SELECT @d SELECT @e=CAST(@b AS INT) SELECT @e
-
结果是0因为两个都是int类型
DECLARE @a NVARCHAR(50) DECLARE @b NVARCHAR(50) DECLARE @c NVARCHAR(50) DECLARE @d INT DECLARE @e INT SET @a='123/542.01' SELECT @b=SUBSTRING(@a,1,PATINDEX('%/%',@a)-1) SELECT @b SELECT @c=SUBSTRING(@a,PATINDEX('%/%',@a)+1,LEN(@a)-PATINDEX('%/%',@a)) SELECT @c SELECT @d=CAST(CAST(@c AS numeric(18,2)) AS INT) SELECT @d SELECT @e=CAST(@b AS INT) SELECT @e SELECT @e/@d AS N'结果'
- 已建议为答案 Amy PengMicrosoft employee, Moderator 2012年10月22日 7:13