日期:2014-05-18 浏览次数:20454 次
--> 测试数据 declare @tb table ([fID] int,[fName] nvarchar(4),[fFullName] nvarchar(14),[省] nvarchar(2),[市] nvarchar(4),[县] nvarchar(4),[乡] nvarchar(4)) Insert into @tb select 11,'北京','北京','','','','' union all select 51,'四川','四川','','','','' union all select 5101,'成都','四川\成都','','','','' union all select 510101,'锦江区','四川\成都\锦江区','','','','' union all select 51010101,'南光街道','四川\成都\锦江区\南光街道','','','','' Select fId,fName,fFullName, reverse(parsename(replace(reverse([fFullName]),'\','.'),1)), reverse(parsename(replace(reverse([fFullName]),'\','.'),2)), reverse(parsename(replace(reverse([fFullName]),'\','.'),3)), reverse(parsename(replace(reverse([fFullName]),'\','.'),4)) from @tb /* 11 北京 北京 北京 NULL NULL NULL 51 四川 四川 四川 NULL NULL NULL 5101 成都 四川\成都 四川 成都 NULL NULL 510101 锦江区 四川\成都\锦江区 四川 成都 锦江区 NULL 51010101 南光街道 四川\成都\锦江区\南光街道 四川 成都 锦江区 南光街道 */
------解决方案--------------------
/* fId fName fFullName [省] [市] [县] [乡] ----------- ---------- ------------------------------ ---------- ---------- ---------- ---------- 11 北京 北京 北京 NULL NULL NULL 51 四川 四川 四川 NULL NULL NULL 5101 成都 四川\成都 四川 成都 NULL NULL 510101 锦江区 四川\成都\锦江区 四川 成都 锦江区 NULL 51010101 南光街道 四川\成都\锦江区\南光街道 四川 成都 锦江区 南光街道 */
------解决方案--------------------
这是“层级编码树”的结构
如果可以确定各级编码的长度,就可以直接用如下的方式得到结果:
select fid ,fname ,ffullname ,[省] = (select fname from @tb a0 where a0.fid=left(a.id,2)) ,[市] = (select fname from @tb a0 where a0.fid=left(a.id,4)) ,[县] = (select fname from @tb a0 where a0.fid=left(a.id,6)) ,[乡] = (select fname from @tb a0 where a0.fid=left(a.id,8)) from @tb a
------解决方案--------------------
set nocount on declare @t1 table (fid varchar(20),fname varchar(10),ffullname varchar(100)) insert into @t1 (fid,fname,ffullname) values( '11' , '北京' , '北京' ) insert into @t1 (fid,fname,ffullname) values( '51' , '四川' , '四川' ) insert into @t1 (fid,fname,ffullname) values( '5101' , '成都' , '四川\成都' ) insert into @t1 (fid,fname,ffullname) values( '510101' , '锦江区' , '四川\成都\锦江区' ) insert into @t1 (fid,fname,ffullname) values( '51010101' , '南光街道' , '四川\成都\锦江区\南光街道' ) declare @t2 table (fid varchar(20),fname varchar(10),ffullname varchar(100),f1 varchar(20) null, f2 varchar(20) null,f3 varch