Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SQL] - créer un matricule d'1 collaborateur

6 réponses
Avatar
Itsejoke
Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de son
prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en fonction
de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut ête
un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé

6 réponses

Avatar
Synopsis
Bonjour,


Declare @Id Int
Declare @IdStr varchar(3)

-- Le dernier Id
SELECT @ID = Max( CAST( SUBSTRING(matricule, 4, 3) as Int) )
FROM collaborateur
-- Vous rajoutez la clause suivante si vous voulez que l'incrément dépende
des trois premières lettres comme votre exemple.
WHERE substring(matricule, 1, 3) = 'ATR'

-- L'Id au format "000"

Set @IdStr = Right('00' + convert(varchar(3), @Id + 1) , 3)

Cordialement,
"Itsejoke" a écrit dans le message de news:

Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de
son prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en
fonction de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut
ête un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé





Avatar
Fred BROUARD
Quelque chose comme :

SELECT SUBSTRING(PRENOM, 1, 1) + SUBSTRING(NOM, 1, 2)
+ REPLACE(LEFT(CAST(ROW_NUMBER() OVER(ORDER BY SUBSTRING(PRENOM,
1, 1) + SUBSTRING(NOM, 1, 2)) AS VARCHAR(3), 3), ' ', '0')

A +

Itsejoke a écrit :
Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de son
prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en fonction
de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut ête
un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
Itsejoke
Bonsoir Synopsis,

Merci pour votre réponse rapide, je vais tester le MAX...
Hervé


"Synopsis" a écrit dans le message de news:
497cbf79$0$14129$
Bonjour,


Declare @Id Int
Declare @IdStr varchar(3)

-- Le dernier Id
SELECT @ID = Max( CAST( SUBSTRING(matricule, 4, 3) as Int) )
FROM collaborateur
-- Vous rajoutez la clause suivante si vous voulez que l'incrément dépende
des trois premières lettres comme votre exemple.
WHERE substring(matricule, 1, 3) = 'ATR'

-- L'Id au format "000"

Set @IdStr = Right('00' + convert(varchar(3), @Id + 1) , 3)

Cordialement,
"Itsejoke" a écrit dans le message de news:

Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de
son prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en
fonction de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut
ête un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé









Avatar
Itsejoke
Bonsoir Frédéric,
Merci pour votre réponse...
Hervé



"Fred BROUARD" a écrit dans le message de news:
%
Quelque chose comme :

SELECT SUBSTRING(PRENOM, 1, 1) + SUBSTRING(NOM, 1, 2)
+ REPLACE(LEFT(CAST(ROW_NUMBER() OVER(ORDER BY SUBSTRING(PRENOM, 1,
1) + SUBSTRING(NOM, 1, 2)) AS VARCHAR(3), 3), ' ', '0')

A +

Itsejoke a écrit :
Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de
son prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en
fonction de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut
ête un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************


Avatar
Patrice
Sans lien mais ce principe peut générer des matricules plus ou moins douteux
(style CON01 par exemple)... A considérer peut-être si pas déjà fait...

--
Patrice

"Itsejoke" a écrit dans le message de groupe de
discussion : ehc3Ml$
Bonsoir Frédéric,
Merci pour votre réponse...
Hervé



"Fred BROUARD" a écrit dans le message de
news: %
Quelque chose comme :

SELECT SUBSTRING(PRENOM, 1, 1) + SUBSTRING(NOM, 1, 2)
+ REPLACE(LEFT(CAST(ROW_NUMBER() OVER(ORDER BY SUBSTRING(PRENOM, 1,
1) + SUBSTRING(NOM, 1, 2)) AS VARCHAR(3), 3), ' ', '0')

A +

Itsejoke a écrit :
Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de
son prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom, Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en
fonction de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001, cela
doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire peut
ête un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************






Avatar
Itsejoke
Bonsoir Patrice, merci pour ta considération...

Hervé.

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Sans lien mais ce principe peut générer des matricules plus ou moins
douteux (style CON01 par exemple)... A considérer peut-être si pas déjà
fait...

--
Patrice

"Itsejoke" a écrit dans le message de groupe de
discussion : ehc3Ml$
Bonsoir Frédéric,
Merci pour votre réponse...
Hervé



"Fred BROUARD" a écrit dans le message de
news: %
Quelque chose comme :

SELECT SUBSTRING(PRENOM, 1, 1) + SUBSTRING(NOM, 1, 2)
+ REPLACE(LEFT(CAST(ROW_NUMBER() OVER(ORDER BY SUBSTRING(PRENOM,
1, 1) + SUBSTRING(NOM, 1, 2)) AS VARCHAR(3), 3), ' ', '0')

A +

Itsejoke a écrit :
Bonjour à tous,

J'aurais de besoin de créer un matricule d'un collaborateur à partir de
son prénom / nom sous cette forme :

- (1) : Première lettre du prénom : par exemple : A
- (2) : Deux première lettres du nom : par exemple : TR
- (3) : Un entier sur 3 positions XXX en commençant par 001,
002.....010,...,999

Tout ça stocké dans une table avec les 3 champs : Prenom, Nom,
Matricule


Pour générer le ATR (1) et (2) : j'ai utilisé substring...
Mais je ne sais pas comment faire pour la partie "variable" XXX en
fonction de l'existant...
=> Pour éviter les doublons : s'il existe déjà un matricule ATR001,
cela doit générer un matricule = ATR002, etc...

Le matricule pourrait servir de clé primaire et l'on pourrait faire
peut ête un insert en vérifiant cette valeur...?

Merci de votre aide.
Hervé






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************