CONVERT(INT,N_TYPE)&128有什么作用?

时间:2019-02-21 09:54:09

标签: sql-server

我目前正在通过其他人执行的几个SQL函数进行操作,但是我得到的结果我无法解释。

分解部分如下:

SELECT
   N_TYPE,
   CONVERT(INT, N_TYPE)&128,
   CONVERT(INT, N_TYPE)&64
FROM TBL_EXAMPLE

N_TYPE是一个十进制(10,0)字段。我返回的一些示例:

+-----------+-------------+------------+
|  N_TYPE   | CONVERT 128 | CONVERT 64 |
+-----------+-------------+------------+
|         0 |           0 |          0 |
|       200 |         128 |         64 |
|       136 |         128 |          0 |
|        32 |           0 |          0 |
| 536870912 |           0 |          0 |
|        72 |           0 |         64 |
+-----------+-------------+------------+

如果N_TYPE高于这些值,我认为它分别返回64或128,但这不是这种情况(如上N_TYPE = 136所示,其中不返回64)。

那么,这实际上是做什么的?

3 个答案:

答案 0 :(得分:2)

第一部分是将import java.io.{File, PrintWriter} var array=df.collect val writer = new PrintWriter(new File("E:\\....\\Output.csv" )) writer.write("AAA,AAB,AAC,AAD"+"\n") for (i<-0 to array.length-1){ writer.write(array(i).toString.replace("[","").replace("]","")+"\n") } writer.close() 列转换为N_TYPE。第二部分是使用 int运算符,即bitwise AND operator

因此,如果您应用&,则如果未设置右边第7个二进制数字,则将得到0的值,如果该数字被设置为1,则将得到64的值。

答案 1 :(得分:0)

SQL Server中的与号(&)是AND 按位 运算符,也是示例中使用的方式是为了确定组成整数值12864的位在位置上也应与组成左侧值的位(CONVERT(INT, N_TYPE)的结果)相匹配。 / p>

检查以下示例:

Position    8   7   6   5   4   3   2   1
Result                              
0           0   0   0   0   0   0   0   0
1           0   0   0   0   0   0   0   1
2           0   0   0   0   0   0   1   0
4           0   0   0   0   0   1   0   0
8           0   0   0   0   1   0   0   0
16          0   0   0   1   0   0   0   0
32          0   0   1   0   0   0   0   0
64          0   1   0   0   0   0   0   0
72          0   1   0   0   1   0   0   0
128         1   0   0   0   0   0   0   0
136         1   0   0   0   1   0   0   0
200         1   1   0   0   1   0   0   0

您将看到200 & 128将返回(按位)10000000,这些位都是具有1的位(AND以此方式工作),然后转换回{{ 1}}作为128

另一个示例INT将返回136 & 8,它将转换回为00001000

答案 2 :(得分:0)

在您的情况下,&是用于两个表达式之间的位操作的按位运算符。

例如

 select 200&128

将被计算为

    200      11001000   
&   128      10000000
---------   ---------   
=   128      10000000

类似地

select 31&128

将计算为

    31      00011111    
&   128     10000000    
---------   --------
=   0       00000000    

您可以详细了解按位运算符Bitwise Operators (Transact-SQL)