假如有张表a,字段如下:
  id         name
 1           北京;上海;
 2           广东;福建;广西;
......下面查询条件是“ 上海;北京;”
现在怎么可以查询出
  id         name
 1           北京;上海;

解决方案 »

  1.   


    create table tb (id int,name varchar(20))
    insert into tb
    select 1,'北京;上海;' union
    select 2,'广东;福建;广西;'declare @str varchar(20)='上海;北京;'
    select * from tb where PATINDEX('%[^'+@str+']%',name)=0/*
    id          name
    ----------- --------------------
    1           北京;上海;
      

  2.   

    这种赋值sql server 2008中才好使。
    如果是低版本的create table tb (id int,name varchar(20))
    insert into tb
    select 1,'北京;上海;' union
    select 2,'广东;福建;广西;'declare @str varchar(20)
    set @str='上海;北京;'
    select * from tb where PATINDEX('%[^'+@str+']%',name)=0
      

  3.   

    select * from a where name='北京;上海;'
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-05-11 16:34:38
    -- Verstion:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([id] int,[name] varchar(15))
    insert [tb]
    select 1,'北京;上海;' union all
    select 2,'广东;福建;广西;'
    --------------开始查询--------------------------
    declare @str varchar(20)
    set @str='上海;北京;'
    select * from tb where PATINDEX('%[^'+@str+']%',name)=0
    ----------------结果----------------------------
    /* id          name
    ----------- ---------------
    1           北京;上海;(1 行受影响)
    */