两个表数据是一一对应的吗?
楼主的意思是不是通过 aa , wjh 两个字段关联后,
如果bb字段中 包含 ny 字段,就把ny字段从bb字段中扣去那?

解决方案 »

  1.   

    update t1.bb
    set t1.bb = replace(t1.bb,t2.ny,'')
    from sxl t1,xxy t2
    where t1.aa = t2.wjh
      

  2.   

    是通过 aa , wjh 两个字段关联的
     select @s2=bb   FROM sxl  WHERE   aa=@s(@s就是wjh取出的数据)
    如果用replace是不可行的
    可能我没有说清楚,在sxl中 如果aa=1111111,bb字段值是,2004,200501,200502,200503,200601
    而xxy表中wjh字段中也有1111111的记录,ny 字段是为200501;那么更新后
    sxl 表中 应显示为:     aa      bb
                      --------------------
                         1111111  ,200401,200601
    把aa=1111111 与之对应的2005年的记录全删除掉
      

  3.   

    如果这样的话,你的这个语句:
    if (SELECT count(*)    FROM sxl WHERE  and aa=@s  )>0 and (SELECT count(*)    FROM sxl WHERE  bb like '%'+@s1+'%'  )>0就不对。因为你的条件是like '%'+@s1+'%'
    按你上面说的应该改为'%'+substring(@s1,2,4)+'%'还有set  @len=CHARINDEX(',200601',@s2)-CHARINDEX(@s1,@s2)这句
    应该写成set  @len=CHARINDEX(',200601',@s2)-CHARINDEX(substring(@s1,2,4),@s2)还有',200601'在后面是死的吗?如果xxy中的数据是2006年的话,这个语句是不是就不对了阿
      

  4.   

    --还有一种变态一点的写法
    --因为你的年份的格式很确定,所以可以这样写
    update t1.bb
    set t1.bb = 
    replace(
    replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(t1.bb,left(t2.ny,5) + '01',''),left(t2.ny,5) + '02',''),left(t2.ny,5) + '03',''),left(t2.ny,5) + '04',''),left(t2.ny,5) + '05',''),left(t2.ny,5) + '06',''),left(t2.ny,5) + '07',''),left(t2.ny,5) + '08',''),left(t2.ny,5) + '09',''),left(t2.ny,5) + '10',''),left(t2.ny,5) + '11',''),left(t2.ny,5) + '12','')
    from sxl t1,xxy t2
    where t1.aa = t2.wjh就是把所对应年份的12个月都替换出来!嘿嘿
    这样写的语句不受你查询的年份的限制。
      

  5.   

    如果这样的话,你的这个语句:
    if (SELECT count(*)    FROM sxl WHERE  and aa=@s  )>0 and (SELECT count(*)    FROM sxl WHERE  bb like '%'+@s1+'%'  )>0就不对。因为你的条件是like '%'+@s1+'%'
    ________________________________________________
    我是有两个条件的,(1)xxy中的wjh的记录要对应sxl中的aa
                      (2)xxy中的ny包含于sxl中的bb
    还有set  @len=CHARINDEX(',200601',@s2)-CHARINDEX(@s1,@s2)这句
    应该写成set  @len=CHARINDEX(',200601',@s2)-CHARINDEX(substring(@s1,2,4),@s2)还有',200601'在后面是死的吗?如果xxy中的数据是2006年的话,这个语句是不是就不对了阿
    _________________________________________________________
    这一点我还没处理好,我的想法是如果xxy中ny字段中的值是,200501
    __________________________________________________________________________
    你的substring(@s1,2,4)只是取的年,我是以,年月(,200501)去查询的
    还有,200401,200501,200601是在sxl字段bb内的数据值,如果xxy中的ny值为,200501而sxl字段bb内的数据值为,200401,200501,200502,200503,200601更新后要将,200501,200502,200503删除掉。也就是说xxy中的ny值为,200503必须要将,200503之后所有2005年(,200503,200504,200505,200506,200507,200508,200509,200510,200511,200512)的数据删除
      

  6.   

    也就是说xxy中的ny值为,200503必须要将sxl中bb为200503之后所有2005年(,200503,200504,200505,200506,200507,200508,200509,200510,200511,200512)的数据删除如果sxl中bb中的值为(,200501,200502,200503,200504,200505,200506,200507,200508,200509,200510,200601)更新后则为(,200501,200502,200601)
      

  7.   

    请问CHARINDEX ( expression1 , expression2 [ , start_location ] ) 语法中
    expression1 , expression2两个值是否都可以为变量
      

  8.   

    sxl  中有aa,bb字段;
             aa         bb
    ___________________________
          1111111     ,200401,200501,200601
          2222222     ,200401,200505,200601
          3333333     ,200401,200501,200601       
    xxy中有wjh,ny 字段;
             wjh      ny 
    ___________________________
          1111111     ,200501
          2222222     ,200505
          3333333     ,200501其实主要是以下问题:
    use DSTrans
    DECLARE @len int
    DECLARE @len3 int
    DECLARE @s varchar(8000)
    DECLARE @s1 varchar(8000)
    DECLARE @s2 varchar(8000)
    DECLARE Customer_cursor2 cursor for
    select wjh,ny from xxy
    open Customer_cursor2 
    Fetch Next from Customer_cursor2
    into @s,@s1
    while @@Fetch_status=0
    Begin
    select @s2=bb   FROM sxl  WHERE   aa=@s
    set @len=CHARINDEX(',200601',@s2)-CHARINDEX(@s1,@s2)
    select @len
    Fetch Next From Customer_cursor2
    into @s,@s1
    end
    close Customer_cursor2
    Deallocate Customer_cursor2
    执行后
    @len=15但是执行以下找码DECLARE @len int
    DECLARE @s varchar(8000)
    DECLARE @s1 varchar(8000)
    set @s=',200501'
    set @s1=',200401,200501,200601'
    set @len=CHARINDEX(',200601',@s1)-CHARINDEX(@s,@s1)
    select @len
    执行后:@len=7这是为什么???????????????????????????????
      

  9.   

    我是有两个条件的,(1)xxy中的wjh的记录要对应sxl中的aa
                      (2)xxy中的ny包含于sxl中的bb(1)要对应,就加上对应条件sxl.aa = xxy.wjh 我想这一点你自己清楚就不用我说了吧,所以我才没有提。
    (2)要包含于,那肯定就要like "%...%",用like 是没有错的错误的地方在于:其实你还有一点没有表述清楚就是:“200503必须要将,200503之后所有2005年的数据”这一点。
    请问CHARINDEX ( expression1 , expression2 [ , start_location ] ) 语法中
    expression1 , expression2两个值是否都可以为变量
    这个没有问题。