Вы можете объявить SQL Vars в Query и вычислить разницу в каждой итерации, как показано в примере ниже:
схемы
create table MyTable
( ai int auto_increment primary key,
id varchar(100) not null
);
insert MyTable (id) values
('AA000001'),
('AA000002'),
('AA000005'),
('AA000008'),
('AA000009'),
('AA000010');
Запрос
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;
Это внутри запрос (а не окончательный набор результатов, приведенный выше)
+----------+--------+------+------------+-------+
| 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 |
+----------+--------+------+------------+-------+
Фактические результаты выше запрос:
+----------+
| id |
+----------+
| AA000005 |
| AA000008 |
+----------+
Вот SQL Fiddle.
фиксированный шаблон AAxxxxxx? –
может даже быть 'etc000001' ... – Drew
или может быть« AAAxxxxx »? Потому что, если только 2, вы можете использовать 'substring' или' left' или 'right', чтобы вырезать' varchar' – Nebi