我正在使用SQl数据库
我有一个表的列数据类型为Blob。
for e.g:
create table Alarm(
id int,
xyz blob
);
这是我的插入声明:
INSERT INTO警报值(2,' 1000001');
插入警报值(5,' 0001000');
插入警报值(7,' 0110110');
这是我的SELECT语句
SELECT * from Alarm其中xyz&演员(' 1001001'作为blob);
当我使用按位AND 操作时,它会返回表中的所有记录。 但在这种情况下记录1&应该选择2。
select 语句返回所有错误的记录。
请帮帮我。
答案 0 :(得分:0)
你不能做你想要的,也就是说,存储表示数字二进制值的字符串/ BLOB,并对它们执行算术或布尔运算。 SQLite没有内置的方法来解释二进制数字字符串。
但是,除非您的二进制表示长于64位,否则您只需将值存储为普通数字,如下面的记录所示:
SQLite version 3.8.4.1 2014-03-11 15:27:36
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .read so.sql3
create table Alarm(
id integer,
xyz integer
);
insert into Alarm values
( 1, 65 ), -- 0x41 == 00100001
( 2, 8 ), -- 0x08 == 00001000
( 3, 54 ) -- 0x36 == 00110110
;
select * from Alarm where
xyz & 73 -- 0x49 == 01001001
;
1|65
2|8
显然,如果您的“数字”以二进制表示形式到达,或者结果需要以这种格式传递,则需要在SQL语句的任何一侧执行适当的转换。我相信SQLite的稍后版本会接受0x41
表示法,以允许数字直接以十六进制指定。
我能想到的唯一其他选择是定义自己的用户定义函数(参见SQLite3文档中的Create Or Redefine SQL Functions),以执行 binary-string-to -integer 转换。但是,我没有这方面的经验,除非有一个非常令人信服的理由将二进制表示存储为字符串,否则它可能有点过分。