MySQL вставляет несколько значений фиксированной длины вручную
Я хочу вставить несколько значений в таблицу, где значение в одном из столбцов увеличивается последовательно. Однако последовательность является немного сложной из-за требований бизнеса.
Одиночная вставка будет выглядеть примерно так:
INSERT INTO blah (col1, col2) VALUES ('SU0001', 'myemail');
Теперь col1 - это значение, которое необходимо увеличить, но сохранить структуру фиксированной длины. Поэтому следующая вставка должна быть такой:
INSERT INTO blah (col1, col2) VALUES ('SU0002', 'myemail');
и так далее.. до:
INSERT INTO blah (col1, col2) VALUES ('SU1600', 'myemail');
Как я могу сделать это только с SQL. Я легко могу сделать это в Java и Ruby, но я застрял в этом и перепробовал несколько вещей, но большинство, похоже, не сохраняет структуру фиксированной длины (становится SU1, SU2 вместо SU0001, SU0002).
Спасибо за помощь!
Викрам
2 ответа
Поскольку у вас уже есть приращение вниз, кажется, все, что вам не хватает, это LPAD
,
LPAD(@i, 4, '0')
добавит повторения '0' слева от @i
так, чтобы результирующая строка имела ширину не менее 4 символов.
Вы даже можете поместить логику приращения в триггер.
delimiter //
CREATE TRIGGER incr_col1 BEFORE INSERT ON blah
FOR EACH ROW BEGIN
SET @prev=(SELECT COALESCE(MAX(col1), 0) FROM blah);
SET NEW.col1 = CONCAT('SU', LPAD(1+SUBSTR(@prev, 3), 4, '0'));
END //
delimiter ;
Создать ВРЕМЕННЫЙ СТОЛ с 0-9
после этого составьте запрос, который присоединяется к этой таблице самостоятельно столько раз, сколько необходимо (2 - для 00 - 99 и т. д.)
после этого сделать INSERT ... SELECT из подзапроса
;-)
и LPAD() для ведущих нулей