比如表
ID Name Sex Resume (ID,名字,性别,简历)
1 张三 男 张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。
2 李四 男 李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3 王五 男 王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。
把简历中出现不属于该名字的记录查找出来(如第2条出现了李六先生,第3条出现了张四女士)该语句应如何实现?
ID Name Sex Resume (ID,名字,性别,简历)
1 张三 男 张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。
2 李四 男 李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3 王五 男 王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。
把简历中出现不属于该名字的记录查找出来(如第2条出现了李六先生,第3条出现了张四女士)该语句应如何实现?
where charindex(name,Resume)=0
拆分如下:
/*
标题:简单数据拆分(version 2.0)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2010-05-07
地点:重庆航天职业学院
描述:有表tb, 如下:
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
*/--1. 旧的解决方法(sql server 2000)create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go--方法1.使用临时表完成
SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b SELECT A.id, value = SUBSTRING(A.[value], B.id, CHARINDEX(',', A.[value] + ',', B.id) - B.id)
FROM tb A, # B
WHERE SUBSTRING(',' + A.[value], B.id, 1) = ','DROP TABLE #--方法2.如果数据量小,可不使用临时表
select a.id , value = substring(a.value , b.number , charindex(',' , a.value + ',' , b.number) - b.number)
from tb a join master..spt_values b
on b.type='p' and b.number between 1 and len(a.value)
where substring(',' + a.value , b.number , 1) = ','--2. 新的解决方法(sql server 2005)
create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go--方法1.使用xml完成
SELECT A.id, B.value FROM
(
SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb
) A OUTER APPLY
(
SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
) B--方法2.使用CTE完成
;with tt as
(select id,[value]=cast(left([value],charindex(',',[value]+',')-1) as nvarchar(100)),Split=cast(stuff([value]+',',1,charindex(',',[value]+','),'') as nvarchar(100)) from tb
union all
select id,[value]=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from tt where split>''
)
select id,[value] from tt order by id option (MAXRECURSION 0)
DROP TABLE tb/*
id value
----------- ------------------------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc(5 行受影响)
*/
create table tb(ID int,Name varchar(10),Sex varchar(10),Resume varchar(50))
insert into tb values(1 ,'张三', '男', '张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。')
insert into tb values(2 ,'李四', '男', '李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。')
insert into tb values(3 ,'王五', '男', '王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。')
go
SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b select * from tb where id in
(
select Id from
(
SELECT A.id, A.Name, Resume = SUBSTRING(A.[Resume], B.id, CHARINDEX(',', A.[Resume] + ',', B.id) - B.id)
FROM tb A, # B
WHERE SUBSTRING(',' + A.[Resume], B.id, 1) = ','
) t
where charindex(name , Resume) = 0
)DROP TABLE #drop table tb/*
ID Name Sex Resume
----------- ---------- ---------- --------------------------------------------------
2 李四 男 李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3 王五 男 王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。(所影响的行数为 2 行)
*/--如果考虑是姓名的话.
create table tb(ID int,Name varchar(10),Sex varchar(10),Resume varchar(50))
insert into tb values(1 ,'张三', '男', '张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。')
insert into tb values(2 ,'李四', '男', '李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。')
insert into tb values(3 ,'王五', '男', '王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。')
go
SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b select * from tb where id in
(
select Id from
(
SELECT A.id, A.Name, Resume = SUBSTRING(A.[Resume], B.id, CHARINDEX(',', A.[Resume] + ',', B.id) - B.id)
FROM tb A, # B
WHERE SUBSTRING(',' + A.[Resume], B.id, 1) = ','
) t
where Resume not like Name + '%'
)DROP TABLE #drop table tb/*
ID Name Sex Resume
----------- ---------- ---------- --------------------------------------------------
2 李四 男 李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3 王五 男 王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。(所影响的行数为 2 行)
*/
insert #test select 1 ,'张三','男','张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。'
insert #test select 2 ,'李四','男','李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。'
insert #test select 3 ,'王五','男','王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。'select * from #test where Resume not like '%_'+Name+'%'ID Name Sex Resume
----------- ---------- ---------- ----------------------------------------------------------------------------------------------------
2 李四 男 李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3 王五 男 王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。(2 行受影响)