56,687
社区成员
发帖
与我相关
我的任务
分享
二进制
mysql> select bin(10);
+---------+
| bin(10) |
+---------+
| 1010 |
+---------+
1 row in set (0.00 sec)
十六进制
mysql> select hex(10);
+---------+
| hex(10) |
+---------+
| A |
+---------+
1 row in set (0.00 sec)
把10从五进制转到2进制
mysql> select conv(10,5,2);
+--------------+
| conv(10,5,2) |
+--------------+
| 101 |
+--------------+
1 row in set (0.00 sec)
mysql> select *,hex(friend) from t_xqk;
+----+------+--------------+--------------------------+
| id | name | friend | hex(friend) |
+----+------+--------------+--------------------------+
| 1 | a | | 000000010000000200000003 |
| 2 | b | | 00000001 |
| 3 | c | | 00000002 |
| 4 | d | | 00000003 |
+----+------+--------------+--------------------------+
4 rows in set (0.00 sec)
mysql> delimiter //
mysql> CREATE PROCEDURE sp_xqk (IN vID INT)
-> BEGIN
-> DECLARE v1 BLOB;
-> DECLARE v2,vLen,i INT;
-> DECLARE sFid varchar(10000);
->
-> select friend into v1 from t_xqk where id=vID;
-> set vLen=length(v1);
-> set i=1;
-> set sFid='0';
->
-> WHILE i < vLen DO
-> set sFid = concat (sFid,',',CONV(hex(substr(v1,i,4)),16,10) );
-> SET i=i+4;
-> END WHILE;
-> select * from t_xqk where find_in_set(id,sFid);
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ;
mysql>
mysql> CALL sp_xqk(1);
+----+------+--------------+
| id | name | friend |
+----+------+--------------+
| 1 | a | |
| 2 | b | |
| 3 | c | |
+----+------+--------------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select * from tb_name;
+----+------+----------------+
| id | name | friend |
+----+------+----------------+
| 1 | a | [000100020003] |
| 2 | b | [0001] |
| 3 | c | [0002] |
| 4 | d | [0003] |
+----+------+----------------+
4 rows in set (0.00 sec)
mysql> delimiter //
mysql> drop procedure if exists sp_test//
Query OK, 0 rows affected (0.00 sec)
mysql> create procedure sp_test
-> (
-> in i_num int
-> )
-> begin
-> declare v_friend varchar(500);
-> declare v_str varchar(500);
-> declare v_i int;
-> set v_i =1;
-> set v_str = '';
-> select friend into v_friend from tb_name where id=i_num;
-> set v_friend = replace(v_friend,'[','');
-> set v_friend = replace(v_friend,']','');
-> while v_i <= (char_length(v_friend)/4) do
-> set v_str = concat(v_str,cast(substring(v_friend,(v_i-1)*4+1,4)
as unsigned),',');
-> set v_i = v_i + 1;
-> end while;
-> set v_str = left(v_str,char_length(v_str)-1);
-> set @str = concat('select id,name from tb_name where id in (',v_str,')')
;
-> prepare st from @str;
-> execute st;
-> deallocate prepare st;
-> end;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call sp_test(1);
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
+----+------+
3 rows in set (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
mysql>
CREATE TABLE `dd` (
`id` int(11) DEFAULT NULL,
`a` int(10) DEFAULT NULL,
`b` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8
SELECT * FROM dd;
id,a,b
1,8,000100020003
2,4,0001
3,12,0002
4,12,0003
5,3,0004
DROP PROCEDURE IF EXISTS tttt ;
DELIMITER //
CREATE PROCEDURE tttt()
BEGIN
DECLARE id INT;
SET id=1;
WHILE id<=CEIL(LENGTH((SELECT b FROM dd WHERE id=1))/4) DO
SELECT id,a FROM dd WHERE id=REPLACE(SUBSTRING((SELECT b FROM dd WHERE id=1),id,4*id),'0','');
SET id=id+1;
END WHILE;
END;
//
CALL tttt()//
(0 row(s) affected)
Execution Time : 00:00:00:000
Transfer Time : 00:00:01:093
Total Time : 00:00:01:093
(0 row(s) affected)
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:188
Total Time : 00:00:00:188
Error Code : 1242
Subquery returns more than 1 row
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
DELIMITER //
CREATE PROCEDURE ttt()
BEGIN
DECLARE id INT;
SET id=1;
WHILE id<LENGTH((SELECT b FROM dd WHERE id=1))/4 DO
SET id=id+1;
SELECT id,a FROM dd WHERE id=REPLACE(SUBSTRING((SELECT b FROM dd WHERE id=1),id,4*id),'0','');
END WHILE;
END;
//
DELIMITER //
CREATE PROCEDURE ttt()
BEGIN
DECLARE id INT;
DECLARE @idlist;
SET @idlist=(SELECT friend FROM tb WHERE id=1);
FOR (id=1;id<LENGTH(@idlist)/4;i++)
SELECT id,name FROM tb WHERE id=REPLACE(SUBSTRING(@idlist,id,4*id,'0','');
END
//