现有字符串,长度固定,内容如下
'-1,-1,-1,-1,-1,-1,-1,-1,-1,-1'
中间按逗号开。现在知道要改的位置,如2,那就是要修改第2个-1.我测试的代码如下,@a是位置,11是修改后的值。
mysql> set @A=1;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| ,11,-1,-1,-1,-1,-1,-1,-1,-1,-1 |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> set @A=2;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| -1,11,-1,-1,-1,-1,-1,-1,-1,-1 |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> set @A=10;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| -1,-1,-1,-1,-1,-1,-1,-1,-1,11, |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql>
在处理第1位和第10位的时候,会多出来个逗号。该如何处理?看看大家有没有其他的办法解决这个问题。
'-1,-1,-1,-1,-1,-1,-1,-1,-1,-1'
中间按逗号开。现在知道要改的位置,如2,那就是要修改第2个-1.我测试的代码如下,@a是位置,11是修改后的值。
mysql> set @A=1;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| ,11,-1,-1,-1,-1,-1,-1,-1,-1,-1 |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> set @A=2;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| -1,11,-1,-1,-1,-1,-1,-1,-1,-1 |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> set @A=10;
Query OK, 0 rows affected (0.00 sec)mysql> select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)
);
+--------------------------------------------------------------------------------------------------------------------------------------+
| concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),',11,',SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10)) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| -1,-1,-1,-1,-1,-1,-1,-1,-1,11, |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql>
在处理第1位和第10位的时候,会多出来个逗号。该如何处理?看看大家有没有其他的办法解决这个问题。
如下
set @A=10;
select concat( SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-1),case @A when 1 then '2,' when 10 then ',2' else ',2,' end ,SUBSTRING_INDEX('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',',@A-10));
set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
set @b=2;
select concat(concat(mid(@a,1,3(@b-1)),
replace(mid(@a,3(@b-1)+1,2),"-1","11")),
mid(@a,3*@b,length(@a)-3(@b-1)-2));
set @a='-1,-1,-1,-1,-1,-1,-1,-1,-1,-1';
set @b=2;
select concat(concat(mid(@a,1,3(@b-1)),"11"),
mid(@a,3*@b,length(@a)-3(@b-1)-2));
SET @b=CONCAT(',','-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',',');
SET @A=0;
set @c=3;
DROP TABLE IF EXISTS newtt;
CREATE TEMPORARY TABLE newtt AS
SELECT *,@A:=@a+1 AS pm FROM (
SELECT *,SUBSTR(AA,ID+1,LOCATE(',',AA,ID+1)-ID-1) AS newco
FROM
(SELECT CAST(@b AS CHAR) AS aa ) a LEFT JOIN lsb2 b ON LENGTH(aa)>=b.id AND
SUBSTR(AA,ID,1)=',' AND SUBSTR(AA,ID+1,LOCATE(',',AA,ID+1)-ID-1)<>'') a;
UPDATE newtt SET newco=11 WHERE pm=@c;
SELECT GROUP_CONCAT(newco) FROM newtt
mid(@a,1,3(@b-1))
替换后得到
mid('-1,-1,-1,-1,-1,-1,-1,-1,-1,-1',1,3(2-1))不对吧。这个语法。
试试7楼先。
set @b=2;
select concat(concat(mid(@a,1,3*(@b-1)),"11"),
mid(@a,3*@b,length(@a)-3*(@b-1)-2));忘记加*了。