none
转换SQL某个字段遇到的问题 RRS feed

  • 问题

  •     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# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!



    2012年10月19日 7:18

答案

全部回复

  • But the error was from select statement.
    2012年10月19日 13:40
  • monthrent<>0

    monthrent字段是nvarchar怎麽跟0比较?


    给我写信: QQ我:点击这里给我发消息

    2012年10月19日 17:38
  • 是哦!   我光顾着看后面的转换了,没注意前面的monthRent,回头我试试,多谢啦!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月20日 12:09
  • 不客气  

    给我写信: QQ我:点击这里给我发消息

    2012年10月20日 13:47
  • 谢谢您的回复!这个问题我还需要问深一层!

        前面说了,我的monthRent是nvarchar类型,有时候会出现123/542.01这种样式,我要取“/”之后的“542.01”的整数部分,再将它的整数部分转换成int类型,该如何操作呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月22日 0:58
  • 这样转换

    DECLARE @a NVARCHAR(50)
    SET @a='542.01'
    SELECT CAST(CAST(@a AS numeric(18,2)) AS INT)

    结果:542

    给我写信: QQ我:点击这里给我发消息

    2012年10月22日 2:24
  • 谢谢您的解答,但我是想问下  123/542.01   怎么取数 啊!那个“/”不是“除号”,而“123/542.01”是个字符类型

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2012年10月22日 4:15
  • DECLARE @a NVARCHAR(50)
    SET @a='123/542.01'
    SELECT CAST(CAST(STUFF(@a,1,CHARINDEX('/',@a),'') AS numeric(18,2)) AS INT)
    2012年10月22日 5:06
  • 不知道这样行不

    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


    给我写信: QQ我:点击这里给我发消息

    2012年10月22日 5:23
  • 结果是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'结果'


    给我写信: QQ我:点击这里给我发消息

    2012年10月22日 5:24