int 00000001 老企业
int 00000010 新企业
int 00000100 联系方式完整
int 00001000 联系方式不完整
int 00010000 内容完整
int 00100000 内容不完整
int 01000000 有产品
int 10000000 无产品 
  这几个状态都可以组合起来表示一个企业的状态。如有产品的,内容完整的,联系方式不完整的老企业。其状态值是01011001。
现在我要查询老企业的记录,“01011001”状态值表明企业是老企业,而老企业的状态值是“00000001”。sql 语句select * from c where state ????????????????  00000001请高手赐教。

解决方案 »

  1.   

    select * from c where state like ‘_______1’可以试试
      

  2.   


    --是不是这个意思create table tb(
    name nvarchar(50),
    state varchar(8)
    )insert into tb
    select '企业A','01011001' union all
    select '企业B','10000010' union all
    select '企业C','10011001' union all
    select '企业D','01010010' 
    select * from tb where [state] like '______01'name                                               state
    -------------------------------------------------- --------
    企业A                                                01011001
    企业C                                                10011001
      

  3.   

    老企业用的是最后一位,你的列是int型,所以判断是奇数即可。
      

  4.   

    很简单啊,8位编码,每1位通过0,1来表示两种状态。既然这样要查老企业,就查最后一位是1的好了。
    借用4楼代码:select * from tb where right(state,1)='1'
      

  5.   


    sql 里这么进行二进制的与运算?
      

  6.   

    declare   @n   int,   @i   int,   @s   varchar(100) 
    set   @n   =   123 
    set   @i   =   0 
    set   @s   =   ' ' 
    while   @n   > =   power(2,   @i) 
    begin 
        set   @s   =   case   when   @n   &   power(2,   @i)   >   0   then   '1 '   else   '0 '   end   +   @s 
        set   @i   =   @i   +   1 
    end 
    select   @s     --1111011 按位与,运算符&,比较结果是否大于0http://topic.csdn.net/t/20061019/16/5094765.html
      

  7.   

    select * from c where state&00000001=00000001