Question

Je souhaite insérer plusieurs valeurs dans une table lorsque la valeur dans l'un des incréments de colonne de façon séquentielle. Cependant, la séquence est un peu complexe en raison des besoins de l'entreprise.

L'insert unique serait quelque chose comme ceci:

INSERT INTO blah (col1, col2) VALUES ('SU0001', 'myemail');

, col1 est la valeur qui doit augmenter, mais maintenir la structure de longueur fixe. Donc, la prochaine insert devrait ressembler à ceci:

INSERT INTO blah (col1, col2) VALUES ('SU0002', 'myemail');

et ainsi de suite .. à:

INSERT INTO blah (col1, col2) VALUES ('SU1600', 'myemail');

Comment puis-je faire avec SQL seulement. Je peux facilement le faire en Java et Ruby, mais je suis coincé à cela et ai essayé plusieurs choses, mais la plupart ne semblent pas conserver la structure de longueur fixe (Il se SU1, SU2, au lieu de SU0001, SU0002).

Merci pour toute l'aide!

Vikram

Était-ce utile?

La solution

Puisque vous avez déjà l'incrément vers le bas, il semble tout ce que vous êtes absent est LPAD .

LPAD(@i, 4, '0')

va ajouter des répétitions de « 0 » à la gauche de @i de sorte que la chaîne résultante est au moins 4 caractères large.

Vous pouvez même mettre la logique d'incrémentation dans un déclencheur .

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 ;

Autres conseils

Créer une table temporaire avec 0-9

après cette requête de composition qui joint que l'auto de table autant de fois que nécessaire (2 - sur 00 - 99, etc)

après cela INSERT ... SELECT de sous-requête

; -)

et LPAD () pour les zéros

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top