有一个表 T_Kind
有两个字段: 
F_ID          (Long)
F_Name        (String)  编一个SQL要把F_ID的第n位(bit)是1的找出来, 我的SQL是这样:
PARAMETERS n Byte;
Select * from T_Kind Where ((F_ID And (2^n))>0可是,可是....不管我的F_ID是什么, 查询始终为空?  %#@&%$^%*&^*&%*&^%*^& , 超郁闷!

解决方案 »

  1.   

    写成 F_ID mod (2^n) = 1 试试看吧
      

  2.   

    JET没有位操作功能,我们所用的AND等都是进行逻辑操作,如果你把逻辑结果用于与数值数据进行关系运算,(如楼主的 ((F_ID And (2^n))>0),那么系统将逻辑真值TRUE转换为-1,将逻辑假值FALSE转换为0;因而(F_ID And (2^n)>0总是假,故而没有结果;上楼的是对结果求余,因而也不对。
    ACCESS解决这样的问题比较困难,你可以用SQL SERVER解决,或者将F_ID改成文本型的,这样求某一位会比较方便。
      

  3.   

    不是这样的啊.用转义符啊."_"代表一位.'%'代表N位.想怎么查就怎么查啊.
    比如说你要找第三位为"1"的数.这样写:
    select '列名' 
    from '表名'
    where '列名' like '__1'
    就可以了.
      

  4.   

    to WallesCai(我是老蔡,不是泡菜!):   你的方法不行, 结果是错误的!to jtkk():  我不能用SQL_Server啊大哥, 我必须用Accessto  wshlxvb(酒鬼英明) :  '%'代表N位., 是什么意思啊? 怎么用啊? 
                             你的方法看上去很有可能可以, 但是我很菜, 不知道怎么用啊!
      

  5.   

    //wshlxvb(酒鬼英明) 的 意思是说  % 与 like都是用来模糊查询的  其中like关键字只能用来匹配一位相同的   而%是说结果中只有有一位相同 就行
    所以 编一个SQL要把F_ID的第n位(bit)是1的找出来 你可以通过like来变通 
    既 用 like 查找第n位是1的结果
    sql语句就是 select * frome talbename where F_ID like '_ _ 1'
      

  6.   

    不是啊,楼上的大哥,我的表中的F_ID是Long类型的, 这样可以的吗? like不是对String查询的吗? 我用这个
    SQL: select * from T_MyTable where F_ID like "__1"
    查询的结果是: 标准表达式中数据类型不匹配BTW: 我用的是Access97
      

  7.   

    那 cstr(F_ID) like "__1"可以么?
      

  8.   

    ___1 的方法是不是SQL SERVER的啊, 在Access97 不能用啊, 这下可好, 结不了帖了!!! 5555555