表a中有一字段number
数据类型为float,长度为8
如何删掉以8686开头的所有数据还是表a
a中字段number,数据类型为float,长度为8
如下所示:
number
8613562353442
13474672644
就是说有的数据前有86,有的没有,如何在没有的前加上86,有的话就不变。
如上:
number
8613562353442
8613474672644马上结帖
谢谢

解决方案 »

  1.   

    delete from A where number like '8686%'update A set number=cast('86'+rtrim(number) as float) where  number not like '8686%'
      

  2.   

    1
     delete from tb where [number] like '8686%'
    2
    update tb set [number]=cast('86' + rtrim(cast([number]as char(20))) as int) where not [number] like'86%'
      

  3.   

    1>如何删掉以8686开头的所有数据答: delete 表A where left(number,4)=8686 
      

  4.   

    delete from 表a where cast(number as varchar(20)) like '8686%'
      

  5.   

    谢谢楼上,第一个语句实现不了
    删不掉
    如果数据类型为nvarchar就可以
      

  6.   


    delete from A where rtrim(number) like '8686%'update A set number=cast('86'+rtrim(number) as float) where  rtrim(number) not like '8686%'
      

  7.   

    update 表a set number = cast('86' + ltrim(str(number)) as float)
    where ltrim(str(number)) not like '86%'
      

  8.   

    update 表A set number=cast('86'+rtrim(numberic) as float)  where left(numeric,2)<> 86
      

  9.   

    只说成功执行了查询
    还是没有删除掉以8686开头的所有数据
    xiexie
      

  10.   

    --這個可以刪除
    Delete From TableName Where Left(Convert(Varchar,number,1),5)='8.686'
      

  11.   

    itblog(BegCSharp) ( ) 信誉:100  2006-06-16 10:26:00  得分: 0  
     
     
       语句应该没有问题了!
      
     
    ---------------------
    應該加兩個字,“才怪”。 你看看樓主的數據類型,這個是比較特殊的。你們都沒有做過測試就貼出語句,語句沒有一個是正確的。Delete還好,沒有刪除任何數據。但是Update不但沒有得到樓主要的結果,反而破壞了別人的數據。各位,回答問題時,能不能謹慎點,不要隨便就把語句貼上標簽來。
      

  12.   

    谢谢paoluo(一天到晚游泳的鱼)
      

  13.   

    select smaj.* from smaj,hlfjaj where smaj.date=hlaj.date and smaj.date='2006-6-1'??
      

  14.   

    还是表a
    第二个:我把number数据类型改为nvarchar,这个sql语句怎么写?刚才那个加86长度溢出了。
    a中字段number,如下所示:
    number
    8613562353442
    13474672644
    就是说有的数据前有86,有的没有,如何在没有的前加上86,有的话就不变。
    如上:
    number
    8613562353442
    8613474672644谢谢各位老大了
      

  15.   

    Create Table TEST
    (number Float)
    Insert TEST Select 8613562353442
    Union All Select 13474672644
    Union All Select 868613474672644
    GO
    --刪除的方法一:
    Delete From TEST Where Left(Convert(Varchar,number,1),5)='8.686'
    --刪除的方法二:
    Delete From TEST Where Left(Cast(Cast(number As BigInt) As Varchar),4)='8686'
    --更新
    Update TEST Set number='86'+Cast(Cast(number As BigInt) As Varchar)  Where Left(Cast(Cast(number As BigInt) As Varchar),2)<>'86'Select * From TEST
    Go
    Drop Table TEST
    --Result
    /*
    Number
    8613562353442.0
    8613474672644.0
    */
      

  16.   

    语句是没有问题的,至于为什么删不到,我想可能是楼主数据的问题.楼主表中可能没有主健, 有重复数据,健信息不足,SQL无法区分.不知道是不是这么回事.
      

  17.   

    更新的话在测试表中可以但是真正做的时候出错:
    sql server2000将数据类型nvarchar转换bigint出错怎么回事?
      

  18.   

    fcuandy(www.iaspnet.com) ( ) 信誉:100  2006-06-16 10:51:00  得分: 0  
     
     
       语句是没有问题的,至于为什么删不到,我想可能是楼主数据的问题.楼主表中可能没有主健, 有重复数据,健信息不足,SQL无法区分.不知道是不是这么回事.
      
     
    ---------------------------
    肯定是語句的問題,你自己建表測試下就知道了。因為類型很特殊,樓主采用的是float。這個也是樓主設計表表結構不合理的地方,采用字符型應該更理想。
      

  19.   

    那更新用這句話試試呢Update TEST Set number=Cast('86'+Cast(Cast(number As BigInt) As Varchar) As BigInt) Where Left(Cast(Cast(number As BigInt) As Varchar),2)<>'86'
      

  20.   


    先看這個語句有沒有錯誤Select *From TableName Where Left(Cast(Cast(number As BigInt) As Varchar),2)<>'86'
      

  21.   

    感谢各位
    尤其是paoluo(一天到晚游泳的鱼) 
    谢谢
      

  22.   

    create procedure update_c
    as 
    declare @a varchar(20)
    begin
      declare cursor_update cursor for select * from c 
      open cursor_update
      fetch next from cursor_update into @a
      while @@fetch_status = 0
      begin
      if  exists(select number from c where number=@a and left(number,2)<>'86')
        update c set number='86'+ number where number =@a
      fetch next from cursor_update into @a
      end   close cursor_update
      deallocate cursor_update
    end