Comment générer une clef séquentielle et incrémentale composée d’une partie numérique et d’un suffixe lettré?
Comme c’est une situation souvent rencontrée et que les gens détestent habituellement s’attaquer aux procédures stockées et/ou évitent d’utiliser leur langage de programmation favori (pour avoir une solution à 100% en SQL), j’ai pensé vous montrer le problème qu’on m’a demandé de résoudre en SQL et ma solution (qui peut facilement être adaptée aux problèmes similaires)…
Dans le cas qui nous intéresse, il s’agit de plaques d’immatriculation de la République du Congo (format CEMAC).
/* En supposant la définition suivante CREATE TABLE plaques(plaque VARCHAR(10)); Et le format de plaque d'immatriculation suivant : RC-0000-AA RC-0001-AA ... RC-9999-AA RC-0000-AB RC-0001-AB ... RC-9999-AZ RC-0000-BA ... RC-9999-BZ RC-0000-CA RC-0001-CA Comment générer le prochain numéro de plaque d'immatriculation disponible? */ SELECT CONCAT(prefixe, '-', LPAD(IF(numero=9999, 0, numero+1), 4, '0'), '-', IF(numero=9999, prochain_suffixe, suffixe) ) AS nouvelle_plaque FROM ( SELECT MID(plaque, 1, 2) AS prefixe, (MID(plaque, 4, 4) + 0) AS numero, MID(plaque, 9, 2) AS suffixe, IF( MID(plaque, 10, 1)='Z', CONCAT(CHAR(ASCII(MID(plaque, 9, 1)) + 1), 'A'), CONCAT(MID(plaque, 9, 1), CHAR(ASCII(MID(plaque, 10, 1)) + 1)) ) AS prochain_suffixe FROM plaques ORDER BY suffixe DESC, numero DESC LIMIT 1 ) t
Classé dans:MySQL, programmation, SQL Tagged: CEMAC, Congo, générer, immatriculation, MySQL, plaque, plaque d'immatriculation, SQL
