update A set G= convert(varchar(10),DATEADD("m",1,c),102)这个是更新A表G字段=C字段日期月份加1月 如何达到 更新G字段=C字段日期加一月,天数为不管是几号都为3-8号 
字段A 要定义为 2012.05.12 类型

解决方案 »

  1.   

    update A set G= 
    convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 
    ,DATEADD("m",1,convert(varchar(6),c,112) +'01')),102)
      

  2.   

    从字符串向 datetime 转换时失败。
      

  3.   

    C字段是 char 10  2012.04.01 都是这种类型的
      

  4.   


    update A set G= 
    cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 
    ,DATEADD("m",1,convert(varchar(6),cast(c as datetime),112) +'01')),102)
     as datetime)
      

  5.   

    --或者update A set G= 
    cast(convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 
    ,DATEADD("m",1,cast(c as char(7)) +'.01')),102)
     as datetime)
      

  6.   


    update A set G= 
    convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 
    ,DATEADD("m",1,cast(c as char(7)) +'.01')),102)
      

  7.   

    tanleittl 非常感谢你 这回代码对了 能否备注说明下代码是 说明意思么!
      

  8.   


    --以今天为例
    select convert(varchar(10),dateadd(dd, 2+abs(checksum(newid()))%6 
    ,DATEADD("m",1,cast('2012.09.23' as char(7)) +'.01')),102)
    /*
    ----------
    2012.10.05(1 行受影响)
    */
    --最外层
    convert(varchar(10),时间类型数据或可隐式转换为时间的字符串,102)--将时间数据转换成 yyyy.mm.dd格式的字符串类型
    --内层一,就是上面的时间类型数据
    dateadd(dd, 整数,时间类型数据或可隐式转换为时间的字符串)--时间加N天,dd代表天,
    --同理 
    dateadd("m", 整数,时间类型数据或可隐式转换为时间的字符串)--表示时间加N个月
    --
    2+abs(checksum(newid()))%6 --该语句获取2-7的随机数
    --
    cast('2012.09.23' as char(7)) +'.01'--取前面的7位并+ '.01'即变成'2012.09.01',目的是取本月1号
      

  9.   

    本月1号加一个月 再加 2-7天 即得到下个月的 3号到8号 的时间
    再讲时间类型数据转换成 yyyy.mm.dd的字符串类型输出