有一张表 表名 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 武汉,成湖北省武汉市 在线急等,高分重谢!!
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 武汉,成湖北省武汉市 在线急等,高分重谢!!
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表重庆 重庆市
湖北 武汉
重庆 重庆市
湖北 老河口
江西 赣州
江苏 南京
湖南 衡阳
辽宁 本溪
湖北 孝感
湖北 黄冈
陕西 西安
北京 北京市
上海 上海市
湖南 衡阳
陕西 西安
广东广州
湖北武汉
陕西西安
广东深圳
广东广州
江苏南京
广东深圳
北京
湖北武汉
广东深圳
陕西西安
北京
上海
广东广州
陕西西安
广东深圳
广东广州
现在要添上,一条条的写sql语句加省市加判断什么的太麻烦了而且 像省市连在一起的 如 湖北武汉, 想变成湖北省武汉市,这基本上没有什么可能现在有省份表和城市表,想用现有的数据和 表里的数据对比,如果有相等的 比如说 湖北 和湖北省,相等,那么就把湖北改成湖北省,就这么简单的意思,我是想不清楚了,但是觉得可以实现如果有其他方法,讲讲思路也可以
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+'%'
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
重庆 重庆市
湖北 武汉市
重庆 重庆市
湖北 老河口
江西 赣州市
江苏 南京市
湖南 衡阳市
湖南 衡阳县
辽宁 本溪市
辽宁 本溪县
湖北 孝感市
湖北 黄冈市
陕西 西安市
北京 北京市
上海 上海市
湖南 衡阳市
湖南 衡阳县
陕西 西安市
江西 抚州市
广东 广州市
浙江 杭州市
湖北 石首县
四川 乐山市
湖北 荆州
北京 北京市
北京 北京市
江苏 常州市
重庆 重庆市
江西 新余市
河南 平顶山市
湖北 汉川市
四川 成都市
广东 深圳市
湖南 永州市
湖北 荆州
四川 成都市
上海 上海市
河北 石家庄市
河南 郑州市
湖北 恩施市
广东 广州市
河南 三门峡市
辽宁 朝阳区
辽宁 朝阳市
辽宁 朝阳县
江苏 宿迁市
黑龙江 哈尔滨市
江苏 泰州市
广东 梅州市
湖北 荆州
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
-------------------- -------------------- --------------------------------------------------
北京市 北京市 北京市
北京市 东城区 北京市东城区
北京市 石景山区 北京市石景山区
北京市 平谷县 北京市平谷县
吉林省 吉林市 吉林省吉林市
吉林省 长春市 吉林省长春市
内蒙古自治区 呼和浩特市 内蒙古自治区呼和浩特市
内蒙古自治区 包头市 内蒙古自治区包头市
香港特区 香港特区 香港特区
上海市 浦东新区 上海市浦东新区
上海市 闵行区 上海市闵行区
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楼的,感谢,万分感谢!