2016-09-20 11 views
0

Я пытаюсь выяснить, правильно ли вставлены мои значения, или если по какой-либо причине вы не были вставлены, удалены или пропали без вести, , Я попробовал несколько ответов от Stackoverflow, но они были в основном указывая autoincrementable INT значения, так что они не помогают, так как у меня это значение VARCHAR, которое следует в следующей последовательности:Mysql - Проверьте, не имеет ли столбец VARCHAR при его приращении

AA000001 
AA000002 
... 
AA000100 
... 
AA213978 

и так далее ...

Спасибо за ваше время.

+1

фиксированный шаблон AAxxxxxx? –

+0

может даже быть 'etc000001' ... – Drew

+0

или может быть« AAAxxxxx »? Потому что, если только 2, вы можете использовать 'substring' или' left' или 'right', чтобы вырезать' varchar' – Nebi

ответ

3

Вы можете объявить 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.

+0

таблица зарезервированное слово, так что ему нужны обратные тики – Drew

+0

Выполнено, спасибо, что указали это. –

+0

Там исправлены некоторые опечатки, не уверены, что вы хотите – Drew

0

Чтобы просто проверить, если являются пропущенные значения,

select count(*) <> max(right(col, 6))-min(right(col, 6))+1 || count(*) <> count(distinct col)