位操作问题

flyelf 2003-09-17 11:27:34
declare @mask bigint
set @mask = 0x1000000000000000
if @mask & 1152921504606846976 > 0 --注:1152921504606846976 = 0x1000000000000000
print '包含'
else
print '不包含'

执行上面的语句的时候,出现这个错误:Invalid operator for data type. Operator equals boolean AND, type equals numeric.

该如何解决这个问题
...全文
115 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2003-09-17
  • 打赏
  • 举报
回复
你这样怎么能判断是不是包含呢!!

注释
通过从两个表达式取对应的位,位运算符 & 在两个表达式之间执行按位逻辑与运算。只有当输入表达式中两个位(正在被解析的当前位)的值都为 1 时,结果中的位才被设置为 1;否则,结果中的位被设置为 0。

位运算符 & 只可以用在具有整型数据类型分类的表达式上。

如果左右表达式的整型数据类型不同(例如,左边 expression 的数据类型是 smallint,右边 expression 的数据类型是 int),那么将较小的数据类型的参数转换为较大的数据类型。在该示例中,数据类型为 smallint 的 expression 被转换为 int 数据类型。
flyelf 2003-09-17
  • 打赏
  • 举报
回复
sql里可以进行位操作,在我上面的代码中,
if @mask & 0x1000000000000000 就可以成功
txlicenhe 2003-09-17
  • 打赏
  • 举报
回复
SQL好象不能这样进行位操作吧。
flyelf 2003-09-17
  • 打赏
  • 举报
回复
顺便提问一个问题,如何把一个数字转换为16进制的字符串呢,即把
数字的0x1000000000000000转换为字符串的'0x1000000000000000'
flyelf 2003-09-17
  • 打赏
  • 举报
回复
谢谢楼上的兄弟,果然是高手,结贴了
j9988 2003-09-17
  • 打赏
  • 举报
回复
declare @mask bigint
set @mask = 0x1000000000000000
if @mask & cast(1152921504606846976 as bigint)> 0 --注:1152921504606846976 = 0x1000000000000000
print '包含'
else
print '不包含'
j9988 2003-09-17
  • 打赏
  • 举报
回复
declare @mask bigint
set @mask = 0x1000000000000000
if @mask & cast(1152921504606846976 as bigint)> 0 --注:1152921504606846976 = 0x1000000000000000
print '包含'
else
print '不包含'
flyelf 2003-09-17
  • 打赏
  • 举报
回复
楼上的兄弟,能提供一个转换函数码
zarge 2003-09-17
  • 打赏
  • 举报
回复
应该这样

declare @mask bigint
set @mask = 0x1000000000000000
if @mask & 0x1000000000000000 > 0 --注:1152921504606846976 = 0x1000000000000000
print '包含'
else
print '不包含'

把一个数字转换为16进制的字符串要自己写函数

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧