Quantcast
Channel: MySQL – L'endormitoire
Viewing all articles
Browse latest Browse all 84

Les plaques du Congo

$
0
0

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

Viewing all articles
Browse latest Browse all 84

Trending Articles