首页 > 解决方案 > CONVERT(INT, N_TYPE)&128 是做什么的?

问题描述

我目前正在处理其他人所做的几个 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)。

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

标签: sql-server

解决方案


第一部分是将N_TYPE列转换为int. 第二部分是使用 按位 AND 运算符&的运算符。

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


推荐阅读