文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SQL 位运算

SQL 位运算

时间:2010-12-10  来源:高导

例如:一条记录该字段原来的数字是,2,如我们想加上4,则可以用

update t_User set iFlag = iFlag | 4 where UserID = 1

(iFlag 为该字段名)

例2:在加上4之后我们想去掉4怎么办呢,可以这样实现

update t_User set iFlag = iFlag ^4 where UserID = 1

这样就又把4从该记录中去掉了.

如果我们想选择所有为2的记录该怎么做呢,可以这样实现

select * from t_User where iFlag &2 = 2

SQL中的位运算不但可以取出各种值,而且我们可以对他对数据进行排序

举例如下,新闻列表中的一个字段标识为

1:置顶

2:不置顶

4:推荐

8:不推荐

该字段的值可以为这4种状态的组合,如果我们根据一定条件想把所有置顶的放在前面该如何做呢

select * from t_News order by iFlag & 1 desc

这样我们就把所有置顶的贴子排在前面,当然这里可以加上一定的Where 条件,在Where 里也可可以加一定的位运算,

关于位运算可以查阅相应的SQL 帮助

下面来讲一讲C#中的枚举位运算

这里我们定义一个枚举

    [Flags]
    enum UserFlag
    {
        a = 1,
        b = 2,
        c = 4,
        d = 8,
        e = 16,
        f = 32
    }


在代码里加上如下处理

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {

            这是第一种写法:   string strSQL = "select * from v_User where iFlag & @iFlag = @iFlag";

          这是第二种写法:   string strSQL = "select * from v_User where  @iFlag | iFlag = iFlag

            //SqlParameter parm = new SqlParameter("@iFlag",SqlDbType.Int,4);
            //parm.Value = UserFlag.a | UserFlag.b ;
            SqlConnection con = new SqlConnection("server=.;database=Sinvan_TexDB;User Id=sa;pwd=123;");

            SqlCommand comm = new SqlCommand(strSQL, con);

            comm.Parameters.Add("@iFlag", SqlDbType.Int, 4).Value = UserFlag.a | UserFlag.b;

            SqlDataAdapter adp = new SqlDataAdapter(comm);
            DataTable dTable = new DataTable();
            adp.Fill(dTable);

            UserFlag userFlag = (UserFlag)Enum.Parse(typeof(UserFlag), dTable.Rows[0][11].ToString()); 

        }
    }


进行处理之后userFlag就是数据库中存在的各种组合

我们同样可对其进行一定的位运算处理

如我们想加上 UserFlag.c 可进行如下操作

userFlag = userFlag | Userflag.c

如想去掉UserFlag.c 可进行如下操作

userFlag = userFlag ^ UserFlag.c

如我们要判断是该标识中是否存在c可进行如下操作

(userFlag & UserFlag.c) == UserFlag.c

是不是与SQL Server 中的操作类似,位运算不管什么语言都是通用的,呵呵

可惜Access 不支持位运算

相关阅读 更多 +
排行榜 更多 +
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载
几何飞行安卓版

几何飞行安卓版

飞行射击 下载