MySQL вставляет несколько значений фиксированной длины вручную - PullRequest
1 голос
/ 15 февраля 2010

Я хочу вставить несколько значений в таблицу, где значение в одном из столбцов увеличивается последовательно. Однако последовательность немного сложна из-за требований бизнеса.

Одна вставка будет выглядеть примерно так:

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 ]

2 голосов
/ 15 февраля 2010

Так как вы уже понизили приращение, кажется, что все, что вам не хватает, это 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 голосов
/ 15 февраля 2010

создать ВРЕМЕННЫЙ СТОЛ с 0-9

после этого составного запроса, который присоединяется к этой таблице самостоятельно столько раз, сколько необходимо (2 - для 00 - 99 и т. Д.)

после этого сделать INSERT ... SELECT из подзапроса

; -)

и LPAD () для ведущих нулей

...