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() для ведущих нулей

Другие вопросы по тегам