查找数据库中字符串相同位置不同字符个数小于5的记录

hil2000 2012-12-09 03:53:23
mysql表结构如下
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pic` varchar(50) NOT NULL,
`hashcode` varchar(16) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', '2012120910403250c3fa209bf48.jpg', 'bf8f83818080c0f1');
INSERT INTO `test` VALUES ('2', '2012120620430750c092db26557.JPG', 'ff9880f0f680ceff');
INSERT INTO `test` VALUES ('3', '2012120619582550c08861eb062.jpg', '7f7f004f7f7f7c7f');
INSERT INTO `test` VALUES ('4', '2012112911072650b6d16e7f21f.jpg', '7f7f004f7f7f007f');

其中pic字段为图片名称,hashcode是图片的感知哈希编码(16进制编码字符串,长度固定16位),用户输入一个hashcode,怎么从数据库中找出满足字符串对应位置的字符不同的个数小于5的记录呢?就像“11001”和“11101”对应位置不同字符不同的个数为1,比如
用户输入"7f7f004f7f7f00af",那么第三条和第四条记录是满足的,怎么实现呢?参数为用户输入的hashcode值,需要写存储过程吗?
...全文
282 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hil2000 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 wwwwb 的回复:
这个要拆分`hashcode`、及传过来的值,逐一判断、处理
谢谢,怎么拆分进行逐一判断呢?
wwwwb 2012-12-10
  • 打赏
  • 举报
回复
这个要拆分`hashcode`、及传过来的值,逐一判断、处理
hil2000 2012-12-10
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
SQL code?123456789101112131415161718192021222324252627mysql> select * from test;+----+---------------------------------+------------------+| id | pic | hashcod……
非常感谢!
ACMAIN_CHM 2012-12-10
  • 打赏
  • 举报
回复
mysql> select * from test;
+----+---------------------------------+------------------+
| id | pic                             | hashcode         |
+----+---------------------------------+------------------+
|  1 | 2012120910403250c3fa209bf48.jpg | bf8f83818080c0f1 |
|  2 | 2012120620430750c092db26557.JPG | ff9880f0f680ceff |
|  3 | 2012120619582550c08861eb062.jpg | 7f7f004f7f7f7c7f |
|  4 | 2012112911072650b6d16e7f21f.jpg | 7f7f004f7f7f007f |
+----+---------------------------------+------------------+
4 rows in set (0.06 sec)

mysql> set @x='7f7f004f7f7f00af';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> select *
    -> from test
    -> where length(replace(CONV(CONV(@x,16,10) ^ CONV(hashcode,16,10),10,16),'0',''))<= 5;
+----+---------------------------------+------------------+
| id | pic                             | hashcode         |
+----+---------------------------------+------------------+
|  3 | 2012120619582550c08861eb062.jpg | 7f7f004f7f7f7c7f |
|  4 | 2012112911072650b6d16e7f21f.jpg | 7f7f004f7f7f007f |
+----+---------------------------------+------------------+
2 rows in set (0.00 sec)

mysql>
wwwwb 2012-12-10
  • 打赏
  • 举报
回复
什么数据库?
hil2000 2012-12-09
  • 打赏
  • 举报
回复
哪位大侠帮我看看怎么实现啊?多谢啦!

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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