有一张表 表名 personcomm 内有字段 
n_place_p 户籍省份 如上海,湖北,北京,湖南等,没有省市后缀 
n_place_c 户籍城市 如武汉,长沙,成都等 没有省市后缀 workplace 工作地址 如湖北武汉,湖南长沙,四川成都等,没有省市后缀 另有表 provice 内有字段 p_id 省市编号 provice 省市名称 
如 100044,北京市 
100051,内蒙古自治区 
100058,山东省 有省市后缀 另有表 city 内有字段 c_id 城区编号 city 城区名称 p_id 父级编号 
如 100614 通州区 100044 
101302 德州市 100058 有城区后缀 
问题如下:如何通过sql语句,将表personcomm中的字段,与provice和city中的表字段相对比,如果有相同的 如 湖北 like 湖北省,那么替换成湖北省,北京 like 北京市,替换成北京市 湖北武汉 like 湖北省 成湖北省武汉 又like 武汉,成湖北省武汉市 在线急等,高分重谢!!

解决方案 »

  1.   

    provice表
    100044 北京市
    100045 上海市
    100046 天津市
    100047 重庆市
    100048 香港特区
    100049 澳门特区
    100050 台湾省
    100051 内蒙古自治区
    100052 河北省
    100053 辽宁省
    100054 吉林省
    100055 黑龙江省
    100056 江苏省
    100057 安徽省
    100058 山东省city表100606 东城区 100044
    100607 西城区 100044
    100608 宣武区 100044
    100609 崇文区 100044
    100610 朝阳区 100044
    100611 海淀区 100044
    100612 丰台区 100044
    100613 石景山区 100044
    100614 通州区 100044
    100615 平谷县 100044
    100616 顺义区 100044
    100617 怀柔县 100044
    100618 密云县 100044
    100619 延庆县 100044
    100620 昌平区 100044
    100621 门头沟区 100044
    100622 房山区 100044
    100623 大兴县 100044
    100624 闵行区  100045
    100625 徐汇区  100045
    100626 普陀区  100045
    100627 长宁区  100045
    100628 浦东新区  100045
    100629 嘉定区  100045
    100630 宝山区  100045
    100631 杨浦区 100045
    100632 闸北区 100045
    100633 松江区 100045
    100634 虹口区 100045
    100635 卢湾区 100045
    100636 奉贤区 100045
    100637 青浦区 100045
    100638 静安区 100045
    100639 金山区 100045
    100640 黄浦区 100045
    100641 南汇区 100045
    100642 南汇县 100045
    100643 奉贤县 100045
    100644 金山县 100045personcomm表重庆       重庆市
    湖北       武汉
    重庆       重庆市
    湖北       老河口
    江西       赣州
    江苏       南京
    湖南       衡阳
    辽宁       本溪
    湖北       孝感
    湖北       黄冈
    陕西       西安
    北京       北京市
    上海       上海市
    湖南       衡阳
    陕西       西安
    广东广州            
    湖北武汉            
    陕西西安            
    广东深圳            
    广东广州            
    江苏南京            
    广东深圳            
    北京                
    湖北武汉            
    广东深圳            
    陕西西安            
    北京                
    上海                
    广东广州            
    陕西西安            
    广东深圳            
    广东广州            
      

  2.   

    意思就是 ,以前的数据保存没有添加省市
    现在要添上,一条条的写sql语句加省市加判断什么的太麻烦了而且 像省市连在一起的  如 湖北武汉, 想变成湖北省武汉市,这基本上没有什么可能现在有省份表和城市表,想用现有的数据和 表里的数据对比,如果有相等的 比如说 湖北 和湖北省,相等,那么就把湖北改成湖北省,就这么简单的意思,我是想不清楚了,但是觉得可以实现如果有其他方法,讲讲思路也可以
      

  3.   

    personcomm表 重庆      重庆市          这个叫没有省市后缀 ? 应该有省市后缀吧
      

  4.   

    Try:select ISNULL(b.provice,a.n_place_p) as n_place_p,
    ISNULL(b.city,a.n_place_c) as n_place_c
    from personcomm a left join provice b on b.provice like a.n_place_p+'%'
    left join city c on c.city like a.n_place_c+'%'
      

  5.   

    select ISNULL(b.province,a.n_place_p) as n_place_p,
        ISNULL(c.city,a.n_place_c) as n_place_c
    from job_personcomm a left join province b on b.province like a.n_place_p+'%'
    left join city c on c.city like a.n_place_c+'%'修改后可以运行 查询的东西
    n_place_p       n_place_c
    重庆       重庆市
    湖北       武汉市
    重庆       重庆市
    湖北       老河口
    江西       赣州市
    江苏       南京市 
    湖南       衡阳市
    湖南       衡阳县
    辽宁       本溪市
    辽宁       本溪县
    湖北       孝感市
    湖北       黄冈市        
    陕西       西安市
    北京       北京市
    上海       上海市
    湖南       衡阳市
    湖南       衡阳县
    陕西       西安市
    江西       抚州市
    广东       广州市
    浙江       杭州市
    湖北       石首县
    四川       乐山市
    湖北       荆州
    北京       北京市
    北京       北京市
    江苏       常州市
    重庆       重庆市
    江西       新余市
    河南       平顶山市
    湖北       汉川市
    四川       成都市
    广东       深圳市
    湖南       永州市
    湖北       荆州
    四川       成都市
    上海       上海市
    河北       石家庄市
    河南       郑州市
    湖北       恩施市          
    广东       广州市
    河南       三门峡市
    辽宁       朝阳区
    辽宁       朝阳市
    辽宁       朝阳县
    江苏       宿迁市
    黑龙江     哈尔滨市
    江苏       泰州市 
    广东       梅州市
    湖北       荆州
      

  6.   

    直辖市就那几个,你不会直接在personcomm表加上“省”啊,倒!但是,广西你怎么办,新疆呢?
      

  7.   

    create table personcomm (n_place_p varchar(20),n_place_c varchar(20),workplace varchar(50));
    create table provice (p_id varchar(20),provice varchar(20));
    create table city( c_id varchar(20),city varchar(20), p_id varchar(20));
    go
    insert into provice 
    select 100044, '北京市'  
    union all select 100045 ,'上海市'
    union all select 100048 ,'香港特区' 
    union all select 100051 ,'内蒙古自治区' 
    union all select 100054 ,'吉林省'insert into city
    select 100606 ,'东城区', 100044 
    union all select 100607 ,'西城区', 100044 
    union all select 100613 ,'石景山区', 100044 
    union all select 100615 ,'平谷县', 100044 
    union all select 100618 ,'密云县', 100044 
    union all select 100624 ,'闵行区', 100045 
    union all select 100627 ,'长宁区', 100045 
    union all select 100628 ,'浦东新区', 100045 
    union all select 100629 ,'嘉定区', 100045 
    union all select 100630 ,'包头市', 100051 
    union all select 100631 ,'呼和浩特市', 100051  
    union all select 100632 ,'吉林市', 100054  
    union all select 100633 ,'长春市', 100054  
    insert into personcomm
    select '北京'  ,'北京','北京'
    union all select '北京'  ,'东城','北京东城'
    union all select '北京'  ,'石景山','北京石景山'
    union all select '北京'  ,'平谷','北京平谷'
    union all select '吉林'  ,'吉林','吉林吉林'
    union all select '吉林'  ,'长春','吉林长春'
    union all select '内蒙古'  ,'呼和浩特','内蒙古呼和浩特'
    union all select '内蒙古'  ,'包头','内蒙古包头'
    union all select '香港'  ,'香港','香港'
    union all select '上海'  ,'浦东','上海浦东'
    union all select '上海'  ,'闵行','上海闵行'
    goCreate function GetProvice(@pname varchar(20)) returns varchar(20)
    as
    begin
    declare @temp varchar(20);
    set @temp = @pname + '市' ;
    if exists(select * from provice a where a.provice = @temp)
    return @temp;
    set @temp = @pname + '省' ;
    if exists(select * from provice a where a.provice = @temp)
    return @temp;
    set @temp = @pname + '自治区' ;
    if exists(select * from provice a where a.provice = @temp)
    return @temp;
    set @temp = @pname + '特区' ;
    if exists(select * from provice a where a.provice = @temp)
    return @temp;

    return @pname;
    endgoCreate function GetCity(@cname varchar(20)) returns varchar(20)
    as
    begin
    declare @temp varchar(20);
    set @temp = @cname + '市' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;
    set @temp = @cname + '区' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;
    set @temp = @cname + '新区' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;
    set @temp = @cname + '县' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;
    set @temp = @cname + '旗' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;
    set @temp = @cname + '盟' ;
    if exists(select * from city a where a.city = @temp)
    return @temp;

    return @cname;
    endgo
    update personcomm set n_place_p = dbo.GetProvice(n_place_p),n_place_c = dbo.GetCity(n_place_c),
     workplace= dbo.GetProvice(n_place_p)+ dbo.GetCity(n_place_c)
    where n_place_p <> n_place_c or n_place_p = n_place_c  and n_place_c <> dbo.GetCity(n_place_c)
    update personcomm set n_place_p = dbo.GetProvice(n_place_p),n_place_c = dbo.GetProvice(n_place_p),
     workplace= dbo.GetProvice(n_place_p)
    where n_place_p = n_place_c  and n_place_c = dbo.GetCity(n_place_c)select * from personcommgon_place_p            n_place_c            workplace
    -------------------- -------------------- --------------------------------------------------
    北京市                  北京市                  北京市
    北京市                  东城区                  北京市东城区
    北京市                  石景山区                 北京市石景山区
    北京市                  平谷县                  北京市平谷县
    吉林省                  吉林市                  吉林省吉林市
    吉林省                  长春市                  吉林省长春市
    内蒙古自治区               呼和浩特市                内蒙古自治区呼和浩特市
    内蒙古自治区               包头市                  内蒙古自治区包头市
    香港特区                 香港特区                 香港特区
    上海市                  浦东新区                 上海市浦东新区
    上海市                  闵行区                  上海市闵行区
      

  8.   

    上面的语句,对LZ来说 Create table 和 insert 语句是不用的 ,从 Create Function 开始。
      

  9.   

    获得城市 
    CREATE function getCity 
    (@city varchar(60) 
    ) returns varchar(60) as 
    begin 
    return isnull((select top 1 city from dbo.city where city like rtrim(@city)+'%'),'') 
    end 获得省份 
    CREATE function getProvince 
    (@province varchar(60) 
    ) returns varchar(60) as 
    begin 
    return isnull((select top 1 province from dbo.province where province like rtrim(@province)+'%'),'') 
    end 获得地址,联合的 
    CREATE FUNCTION getAllAddress 

    @address varchar(100) 

    RETURNS nvarchar(100) AS 
    BEGIN 
    declare @vpro nvarchar(50) 
    declare @vcity nvarchar(50) 
    declare @result nvarchar(100) set @vpro = isnull((select top 1 province from province where ltrim(rtrim(@address)) like replace(replace(replace(replace(REPLACE(REPLACE(REPLACE(province,'省',''),'特区',''),'自治区',''),'壮族自治区',''),'藏族自治区',''),'维吾尔',''),'市','')+'%'),'') 
    set @vcity = isnull((select top 1 city from city where ltrim(rtrim(@address)) like '%'+REPLACE(REPLACE(REPLACE(city,'市',''),'区',''),'县','')),'') if @vpro != '' 
    set @result = @vpro 
    if @vcity != '' 
    set @result = @result + '>>'+@vcity return isnull(ltrim(rtrim(@result)),'') 
    END 
    更新语句 省市 
    update job_personcomm 
    set n_place_p = dbo.getProvince(n_place_p), 
    liveplace_p = dbo.getProvince(liveplace_p), 
    n_place_c = dbo.getCity(n_place_c), 
    liveplace_c = dbo.getCity(liveplace_c) 地址 
    update job_personintent set s_pwl1 = ltrim(rtrim(dbo.getAllAddress(s_pwl1))), 
    s_pwl2 = ltrim(rtrim(dbo.getAllAddress(s_pwl2))), 
    s_pwl3 = ltrim(rtrim(dbo.getAllAddress(s_pwl3))) 题目是我出的,资料给的不全,是我的问题。我自己已经解决了,谢谢各位费心思了,特别是21楼的,感谢,万分感谢!