假设数据如你所贴,可以采用下面的方法更新update tablename set 字段=substring(字段,1,(PATINDEX('%[0-9]%',字段)-1)) where (PATINDEX('%[0-9]%',字段)-1)>=0

解决方案 »

  1.   


    结你参考,先去掉逗号和数字。可以写成函数方便处理。
    -------------------------------
    declare @y varchar(50)
    set @Y='Belize City 4561,461'
    set @y=replace(@Y,',','') 
    BEGIN
     WHILE PATINDEX('%[^A-Za-z]%',@y)>0
     begin 
    SET @y=STUFF(@y,PATINDEX('%[^A-Za-z]%',@y),1,'') 
     end
     print @y
    END
    ------------------------------------
    结果
    BelizeCity
      

  2.   

    可能要改一思路,
    San, Ignacio 16,812 英文中间带逗号
    先去掉数字,再去掉最后一位逗号
      

  3.   

    Belize City 61,461
    San, Ignacio 16,812
    Orange Walk 15,298
    Belmopan 13,381
    Dangriga 10,750
    这个给的数据很容易有歧义。
    这样我可以转换成不删除数字。而是删除第一个数字后面的所有字符(包括这个数字)
      

  4.   


    从第一位数字开始的都去掉
    declare @y varchar(50)
    declare @I varchar(50)
    set @Y='San, Ignacio 16,812'
    set @I=@Y
    BEGIN
     WHILE PATINDEX('%[^0-9]%',@y)>0
     begin 
    SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'')
     end
     set @y=LEFT(@y,1)
     set @I=left (@i,charindex(@y,@I)-1)
    print @i
    END
      

  5.   


    曾经想过用 
    update Cities_AllCities set CityName=replace(CityName,'1','') 
    update Cities_AllCities set CityName=replace(CityName,'2','') 
    update Cities_AllCities set CityName=replace(CityName,'3','') 
    update Cities_AllCities set CityName=replace(CityName,'4','') 
    .。
    -- 不妨 再增加一倍的工作量,你先替换'1,' ,这样数量中间的“,” 就都没有了,再去替换0-9。
    -- 由原来的替换 10 次,变成 替换 20 次。
    update Cities_AllCities set CityName=replace(CityName,'1','') 
    update Cities_AllCities set CityName=replace(CityName,'1,','') 
      

  6.   

    -- 写反了,先替掉 "1, ",再替掉 "1"
    update Cities_AllCities set CityName=replace(CityName,'1,','') 
    update Cities_AllCities set CityName=replace(CityName,'1','') 
      

  7.   


    create function dbo.test_fun1(@y nvarchar(100))
    returns nvarchar(100)
    as
    BEGIN
    declare @i nvarchar(100)
    set @I=@Y
    WHILE PATINDEX('%[^0-9]%',@y)>0
    begin 
    SET @y=STUFF(@y,PATINDEX('%[^0-9]%',@y),1,'')
    end
    set @y=LEFT(@y,1)
    set @I=left (@i,charindex(@y,@I)-1)
    return @i
    END
    --------------------------------------------------------------------------------------------------
    ---->测试数据
    IF OBJECT_ID('TEMPDB.DBO.#TEMP')IS NOT NULL 
    DROP TABLE #TEMP
    ------------------------------------------------------------------------------------------------------------
    CREATE TABLE #TEMP
    (test nvarchar(100))
    insert into #TEMP
    select 'Belize City 61,461'union all
    select 'San, Ignacio 16,812' union all
    select 'Orange Walk 15,298' union all
    select 'Belmopan 13,381' union all
    select 'Dangriga 10,750'
    go
    select dbo.test_fun1(test) from #temp
    ------------------------------------------------------------------
    结果(5 行受影响)----------------------------------------------------------------------------------------------------
    Belize City 
    San, Ignacio 
    Orange Walk 
    Belmopan 
    Dangriga