Description:
First check my stored function:
FUNCTION `sigmuestra`(muestra VARCHAR(15)) RETURNS varchar(15) CHARSET latin1
BEGIN
DECLARE I INT;
DECLARE car INT;
DECLARE resp VARCHAR(15);
DECLARE bandera BOOL;
SET I = LENGTH(muestra);
SET resp = muestra;
Buscar: LOOP
SET car = ASCII(MID(resp,I,1));
IF car >47 and car < 57 THEN
set car=car+1;
SET bandera = true;
elseif car = 57 THEN
set car=48;
SET bandera = false;
END IF;
SET resp = CONCAT(LEFT(resp,I-1), CHAR(car), right(resp,LENGTH(resp)-I));
SET I = I - 1;
IF I = 0 OR bandera THEN LEAVE Buscar; END IF;
ITERATE Buscar;
END LOOP Buscar;
RETURN resp;
END
Now check this other SELECT statements and returns... they are logically impossible. But it work properly in other computers:
table muestra:
Nombre
A01b
A02b
A04b
A06b
A07b
A09b
I will use "count(*)" in SELECT statement... but the problem is the same with "*"
1- select count(*) from muestra as m, muestra as n
return: 36
2-select count(*) from muestra as m, muestra as n WHERE sigmuestra(m.nombre) =n.nombre;
return: 0
3-select count(*) from muestra as m, muestra as n WHERE sigmuestra(m.nombre) <> n.nombre;
return: 34
My function is working well... look:
SELECT sigmuestra(m.nombre), n.nombre FROM muestra as m, muestra as n;
Return
+----------------------+--------+
| sigmuestra(m.nombre) | nombre |
+----------------------+--------+
| A02b | A01b |
| A03b | A01b |
| A05b | A01b |
| A07b | A01b |
| A08b | A01b |
| A10b | A01b |
| A02b | A02b |
| A03b | A02b |
| A05b | A02b |
| A07b | A02b |
| A08b | A02b |
| A10b | A02b |
| A02b | A04b |
| A03b | A04b |
| A05b | A04b |
| A07b | A04b |
| A08b | A04b |
| A10b | A04b |
| A02b | A06b |
| A03b | A06b |
| A05b | A06b |
| A07b | A06b |
| A08b | A06b |
| A10b | A06b |
| A02b | A07b |
| A03b | A07b |
| A05b | A07b |
| A07b | A07b |
| A08b | A07b |
| A10b | A07b |
| A02b | A09b |
| A03b | A09b |
| A05b | A09b |
| A07b | A09b |
| A08b | A09b |
| A10b | A09b |
+----------------------+--------+
How to repeat:
It doesn't occurs in other computer :P
Suggested fix:
Kill me please!!!
Description: First check my stored function: FUNCTION `sigmuestra`(muestra VARCHAR(15)) RETURNS varchar(15) CHARSET latin1 BEGIN DECLARE I INT; DECLARE car INT; DECLARE resp VARCHAR(15); DECLARE bandera BOOL; SET I = LENGTH(muestra); SET resp = muestra; Buscar: LOOP SET car = ASCII(MID(resp,I,1)); IF car >47 and car < 57 THEN set car=car+1; SET bandera = true; elseif car = 57 THEN set car=48; SET bandera = false; END IF; SET resp = CONCAT(LEFT(resp,I-1), CHAR(car), right(resp,LENGTH(resp)-I)); SET I = I - 1; IF I = 0 OR bandera THEN LEAVE Buscar; END IF; ITERATE Buscar; END LOOP Buscar; RETURN resp; END Now check this other SELECT statements and returns... they are logically impossible. But it work properly in other computers: table muestra: Nombre A01b A02b A04b A06b A07b A09b I will use "count(*)" in SELECT statement... but the problem is the same with "*" 1- select count(*) from muestra as m, muestra as n return: 36 2-select count(*) from muestra as m, muestra as n WHERE sigmuestra(m.nombre) =n.nombre; return: 0 3-select count(*) from muestra as m, muestra as n WHERE sigmuestra(m.nombre) <> n.nombre; return: 34 My function is working well... look: SELECT sigmuestra(m.nombre), n.nombre FROM muestra as m, muestra as n; Return +----------------------+--------+ | sigmuestra(m.nombre) | nombre | +----------------------+--------+ | A02b | A01b | | A03b | A01b | | A05b | A01b | | A07b | A01b | | A08b | A01b | | A10b | A01b | | A02b | A02b | | A03b | A02b | | A05b | A02b | | A07b | A02b | | A08b | A02b | | A10b | A02b | | A02b | A04b | | A03b | A04b | | A05b | A04b | | A07b | A04b | | A08b | A04b | | A10b | A04b | | A02b | A06b | | A03b | A06b | | A05b | A06b | | A07b | A06b | | A08b | A06b | | A10b | A06b | | A02b | A07b | | A03b | A07b | | A05b | A07b | | A07b | A07b | | A08b | A07b | | A10b | A07b | | A02b | A09b | | A03b | A09b | | A05b | A09b | | A07b | A09b | | A08b | A09b | | A10b | A09b | +----------------------+--------+ How to repeat: It doesn't occurs in other computer :P Suggested fix: Kill me please!!!