有使用使用一个字段标记多种状态的时候需要用到按位操作,下面做下总结。
mysql包含状态
BITAND(order_status,#orderStatus#)=#orderStatus#
oracle
select * from usr_info t where bitand(t.CERTI_CODE,1)=1
oracle创建或和异或的函数
或 or
create function bitor (exp1 number, exp2 number)
return number
is
begin
return ((exp1 + exp2) - bitand(exp1,exp2));
end;
异或XOR
create function bitxor (exp1 number, exp2 number)
return number
is
begin
return ((exp1 + exp2) - bitand(exp1,exp2) * 2);
end;
java操作
ibatis包含一个状态
<isGreaterThan prepend="and" property="orderStatus" compareValue="0">
BITAND(card_order.order_status,#orderStatus#)=#orderStatus# </isGreaterThan>
如果包含多个状态
<isGreaterThan prepend="and" property="orderCombinedStatus" compareValue="0">
<iterate prepend="AND " property="orderCombinedStatus" open="(" close=")" conjunction="OR">
BITAND(card_order.order_status,#orderCombinedStatus[]#)=#orderCombinedStatus[]#
</iterate>
</isGreaterThan>