注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

SQL 位运算  

2014-10-23 09:39:46|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
-- sql位运算相关 by dragon 2013-03-19
-- bit转整数:4位0-15
select B'0000'::integer,B'1111'::integer;

-- 整数转bit
select 0::bit(4),2::bit(4),4::bit(4),cast(2^2 as integer)::bit(4);

-- 字符串转bit:4位0-15
-- 使用X::bit(n),如果X的位数不足n则自动在右侧加0补齐,如果X的位数多于n位则自动裁剪右侧的值
select '1'::bit(4),'0001'::bit(4),'1111'::bit(4);

-- 测试数据
drop table if exists t;
create table t (
id integer not null,
n integer not null,
b bit(4),
ba bit[4],
s varchar(10),
primary KEY (id)
);
insert into t(id,n) values (1,0);
insert into t(id,n) values (2,1);
insert into t(id,n) values (3,2);
insert into t(id,n) values (4,3);
insert into t(id,n) values (5,4);
insert into t(id,n) values (6,5);
insert into t(id,n) values (7,6);
insert into t(id,n) values (8,7);
insert into t(id,n) values (9,8);
update t set b = n::bit(4), s = n::bit(4), ba = n::bit(4);
select * from t;

-- 判断第1位为1的方法: 与运算 1-3-5-7
select * from t where b & B'0001' = B'0001';
select * from t where (b << 3)::bit(1) = B'1';
select * from t where b << 3 = B'1000';
select * from t where n&1 = 1;

-- 判断第1位不为1的方法: 与运算
select * from t where b & B'0001' = B'0000';
select * from t where b << 3 = B'0000';

-- 判断第2位为1的方法: 与运算 2-3-6-7
select * from t where b & B'0010' = B'0010';
select * from t where (b << 2)::bit(1) = B'1';
select * from t where n&2 = 1;


select * from t where (b << bit_length(b)-2)::bit(1) = B'1';
select t.*,bit_length(b),bit_length(s),bit_length(n) from t;

select 2::bit(4),16::bit(8);

select 2^100;

参考:Java位操作全面总结
  评论这张
 
阅读(486)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018