比如表
ID  Name Sex Resume    (ID,名字,性别,简历)
1   张三 男  张三先生xxxxxxxxxxx,张三先生xxxxxxxxxxx。
2   李四 男  李四先生xxxxxxxxxxx,李六先生xxxxxxxxxxx。
3   王五 男  王五先生xxxxxxxxxxx,张四女士xxxxxxxxxxx。
把简历中出现不属于该名字的记录查找出来(如第2条出现了李六先生,第3条出现了张四女士)该语句应如何实现?

解决方案 »

  1.   

    select * from tb 
    where charindex(name,Resume)=0
      

  2.   

    select * from tb where charindex(name,Resume)=0
      

  3.   

    --orselect * from tb where Resume not like '%'+name+'%'
      

  4.   

    我知道以name为基准,上面的例子三条记录中Resume都包含了name,那怎么确定第二条中"李六先生"是人名,而不是简历内容?
      

  5.   

    我感觉需要对ID进行拆分,然后用not like 
    拆分如下:
    /*
    标题:简单数据拆分(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 行受影响)
    */
      

  6.   

    以下为2000中用临时表的方法,其他方法见8楼.--如果不考虑是姓名,只要内容中不包含姓名.
    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 行)
    */
      

  7.   

    create table #test(ID int,Name varchar(10),Sex varchar(10),Resume varchar(100))
    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 行受影响)