Vous pouvez déclarer Vars SQL dans la requête et calculer la différence de chaque itération, comme le montre l'exemple ci-dessous:
Schéma
create table MyTable
( ai int auto_increment primary key,
id varchar(100) not null
);
insert MyTable (id) values
('AA000001'),
('AA000002'),
('AA000005'),
('AA000008'),
('AA000009'),
('AA000010');
Recherche
select id
FROM
(
select
t.id,
SUBSTRING(t.id,3) as s,
CAST(SUBSTRING(t.id,3) AS UNSIGNED) - @lastId as diff,
if(@lastId = 0, 0, CAST(SUBSTRING(t.id,3) AS UNSIGNED) - @lastId) as Difference,
@lastId := CAST(SUBSTRING(t.id,3) AS UNSIGNED) as dummy
from
`MyTable` t,
(select @lastId := 0) SQLVars
order by
t.id
) d
WHERE diff>1;
C'est à l'intérieur requête (pas le jeu de résultats final de ce qui précède)
+----------+--------+------+------------+-------+
| id | s | diff | Difference | dummy |
+----------+--------+------+------------+-------+
| AA000001 | 000001 | 1 | 0 | 1 |
| AA000002 | 000002 | 1 | 1 | 2 |
| AA000005 | 000005 | 3 | 3 | 5 |
| AA000008 | 000008 | 3 | 3 | 8 |
| AA000009 | 000009 | 1 | 1 | 9 |
| AA000010 | 000010 | 1 | 1 | 10 |
+----------+--------+------+------------+-------+
Résultats réels de recherche: Au-dessus
+----------+
| id |
+----------+
| AA000005 |
| AA000008 |
+----------+
Voici le SQL Fiddle.
est un motif fixe AAxxxxxx? –
pourrait même être 'etc000001' ... – Drew
ou peut-il être 'AAAxxxxx'? Parce que si seulement 2 vous pouvez utiliser 'substring' ou' left' ou 'right' pour couper le' varchar' – Nebi