zoukankan      html  css  js  c++  java
  • 逻辑运算符"&"配合二进制实现一个字段表示多个判断条件的状态

    与运算&

    语法相同位的两个数字都为1,则为1;若有一个不为1,则为0

    举例:10011001&00110010

    10011001

    &

    00110010

    ---------------------------------------------------------------------------------------------------------

    =00010000

    从上面第例题,我们可以发现,我们可以利用与&运算判断二进制的某个数从0位到七位的任何一位数是0还是1;我们写一个判断的模板:只需要我们将需要判断的位数所对应的模板位数的值设置为1即可(不能设置为0,因为0和任何数&运算结果都是0,起不到判断作用)

    例如下面的数:我们需要对他的第三位和第五位判断:

    10110011

    我们要得出所有第三位是0,第五位是1的数:**1* 0***

    那么这个它对应的判断模板就要是:00101000

    对应关系如下:

    结果模板:**1* 0***

    判断模板:00101000需要判断的位数对应模板值设为1)

    **1* 0***&00101000=00100000

    因此:任何数*********&00101000只要结果是00100000,就符合要求,就一定是**1* 0***格式;

    总结:上面的步骤:

    1、 确定我们要判断的二进制数的具体位数

    2、 根据上面的结果写出模板

    3、 计算出符合要求的二进制数与模板的计算结果

    4、 用于判断即可

    使用场景举例:

    sql查询的时候,如果有很多条件需要我们判断,那么我们可以使用二进制,不同位数的值来表示不同的状态:实现一个字段表示很多种条件的状态!!!

    MZ_SF表的STATE字段为例:

    STATEBIT0: 0=未退款  1=退款0

    ;      BIT1: 0=未日结  1=已日结

    ;      BIT2: 0=挂号处收费  1=收费处收费

    ;      BIT3: 0=未重打发票  1=已重打发票

    ;      BIT4:0=参保  1==不参保

    ;      BIT5-6:

    ;        00=收费处处方  10=电子处方  

    ;        01=药房划价    11=体检处方

    ;      BIT7: 0=已收费  1=未收费7

     ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

    那么01101001就表示:已收费,体检处方,参保,未重打发票,挂号处收费,未日结,退款状态的门诊收费数据;

    那么我们就可以根据上面的方法判断具体的某个条件的状态;从而实现过滤查询的效果;

    例题:

    1、获取当天已收费未退款的所有处方。0*** ***0

    2、获取当天已收费未退款已日结的所有处方。

    3、获取当天已收费未退款已日结的电子处方。

    答案

    1

    分析:第一题对应的结果模板是:0*** ***0

    判断模板是1000 0001(转换成十进制是129

    结果模板和判断模板运算结果是0*** ***0&1000 0001=0

    因此sql为:

    Select  *  from MZ_SF where state &129=0

    state符合(state &129=0)的处方都查出来了

    2

    Select * from MZ_SF where state & 131 = 2  

    3

    Select * from MZ_SF where state & 227=66

  • 相关阅读:
    postgres 类型转换 cast 转
    postgresql Delete+ join
    输出特定格式的查询内容到文本(不是导出查询结果)
    八步搞定亚马逊中国区HTTPS负载均衡器设置
    这辈子只能碰到一次! 记一次SSL无故被撤消!
    亚马逊S3数据迁移到中国区
    python2 微信三方登录 中文乱码
    GitLab Wiki 内容恢复版本管理
    Django rest_framework 实用技巧
    Django rest_framework 加入时间间隔
  • 原文地址:https://www.cnblogs.com/luzhanshi/p/13169822.html
Copyright © 2011-2022 走看看