不明白"&2"是什么意思,连接?还是运算?

解决方案 »

  1.   

    case substring(@bitmap,1,1) & 2 when 2 then @c2 else "explain" end
    是一个case表达式CASE
    计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 
    CASE 搜索函数计算一组布尔表达式以确定结果。 
    两种格式都支持可选的 ELSE 参数。 语法
    简单 CASE 函数:CASE input_expression
        WHEN when_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        ENDCASE 搜索函数:CASE
        WHEN Boolean_expression THEN result_expression
            [ ...n ]
        [ 
            ELSE else_result_expression
        END参数
    input_expression是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft® SQL Server™ 表达式。 WHEN when_expression使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。 n占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。THEN result_expression当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。result expression 是任意有效的 SQL Server 表达式。 ELSE else_result_expression当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。WHEN Boolean_expression使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。 结果类型
    从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。 结果值
    简单 CASE 函数:
    计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。 
    返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。 
    如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。 
    CASE 搜索函数:
    按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。
    返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。 
    如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。 
      

  2.   

    update tb_a set explain=case left(@bitmap,1) &2 when 2 then @c2 else 'explain end where id=@pkc1
      

  3.   

    使用 CASE
    CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显式可选值。数据中的更改是临时的,没有对数据进行永久更改。例如,CASE 函数可以在 state 列中有 CA 值的行的查询结果集内显示 California。CASE 函数包含: CASE 关键字。
    需要转换的列名称。
    指定要搜索的表达式的 WHEN 子句和指定要替换它们的表达式的 THEN 子句。
    END 关键字。
    可选的、定义 CASE 函数别名的 AS 子句。 
    下面示例在查询结果集内显示每个作者所居住州的全名:SELECT au_fname, au_lname, 
       CASE state
          WHEN 'CA' THEN 'California'
          WHEN 'KS' THEN 'Kansas'
          WHEN 'TN' THEN 'Tennessee'
          WHEN 'OR' THEN 'Oregon'
          WHEN 'MI' THEN 'Michigan'
          WHEN 'IN' THEN 'Indiana'
          WHEN 'MD' THEN 'Maryland'
          WHEN 'UT' THEN 'Utah'
            END AS StateName
    FROM pubs.dbo.authors
    ORDER BY au_lname
      

  4.   

    & 2 是逻辑与运算,如二进制例:
    11000000 & 00000010=00000000
    11000010 & 00000010=00000010
    用来判断第2位是否为1
      

  5.   

    &(按位 AND)
    在两个整型值之间执行按位逻辑与运算。语法
    expression & expression参数
    expression是任何有效的 Microsoft® SQL Server™ 表达式,必须由整数数据类型分类中的任何数据类型组成。expression 是经过处理并转换为二进制数字以便进行位运算的整型参数。结果类型
    如果输入值为 int,则返回 int;如果输入值为 smallint,则返回 smallint;或者如果输入值为 tinyint,则返回 tinyint。注释
    通过从两个表达式取对应的位,位运算符 & 在两个表达式之间执行按位逻辑与运算。只有当输入表达式中两个位(正在被解析的当前位)的值都为 1 时,结果中的位才被设置为 1;否则,结果中的位被设置为 0。位运算符 & 只可以用在具有整型数据类型分类的表达式上。如果左右表达式的整型数据类型不同(例如,左边 expression 的数据类型是 smallint,右边 expression 的数据类型是 int),那么将较小的数据类型的参数转换为较大的数据类型。在该示例中,数据类型为 smallint 的 expression 被转换为 int 数据类型。
      

  6.   

    &(按位 AND)
    在两个整型值之间执行按位逻辑与运算。语法
    expression & expression参数
    expression是任何有效的 Microsoft® SQL Server™ 表达式,必须由整数数据类型分类中的任何数据类型组成。expression 是经过处理并转换为二进制数字以便进行位运算的整型参数。结果类型
    如果输入值为 int,则返回 int;如果输入值为 smallint,则返回 smallint;或者如果输入值为 tinyint,则返回 tinyint。注释
    通过从两个表达式取对应的位,位运算符 & 在两个表达式之间执行按位逻辑与运算。只有当输入表达式中两个位(正在被解析的当前位)的值都为 1 时,结果中的位才被设置为 1;否则,结果中的位被设置为 0。位运算符 & 只可以用在具有整型数据类型分类的表达式上。如果左右表达式的整型数据类型不同(例如,左边 expression 的数据类型是 smallint,右边 expression 的数据类型是 int),那么将较小的数据类型的参数转换为较大的数据类型。在该示例中,数据类型为 smallint 的 expression 被转换为 int 数据类型。示例
    下面的示例创建一个具有 int 数据类型的表以显示值,并将该表放入一行中。USE master
    GO
    IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
          WHERE TABLE_NAME = 'bitwise')
       DROP TABLE bitwise
    GO
    CREATE TABLE bitwise

     a_int_value int NOT NULL,
     b_int_value int NOT NULL
    )
    GO
    INSERT bitwise VALUES (170, 75)
    GO下面的查询在 a_int_value 列和 b_int_value 列上执行按位 AND 运算。USE MASTER
    GO
    SELECT a_int_value & b_int_value
    FROM bitwise
    GO下面是结果集:----------- 
    10          (1 row(s) affected)170(a_int_value 或 A,如下所示 )的二进制表示为 0000 0000 1010 1010。75(b_int_value 或 B,如下所示)的二进制表示为 0000 0000 0100 1011。在这两个值之间执行按位 AND 运算所产生的二进制结果是 0000 0000 0000 1010,即十进制数 10。(A & B)
             0000    0000 1010 1010
             0000 0000 0100 1011
             -------------------
             0000 0000 0000 1010
      

  7.   

    @bitmap是个binary(1)型的变量,substring(@bitmap,1,1) 又是什么意思呢?
      

  8.   

    substring(@bitmap,1,1) 取第1位开始的1位长度
      

  9.   

    可binary(1)类型用substring()取出的是什么呀