IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Création ID avec date,0 et incrémentation


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut Création ID avec date,0 et incrémentation
    Bonjour ou bonsoir,

    Je suis des cours en ligne pour MySQL. Pour un travail d'apprentissage j'ai un exercice qui demande de créer par requête INSERT un ID VARCHAR(12) composé par ceci : 20200525 (date actuelle par exemple ) une série de 0 (zéro) et un integer qui représente le total d'enregistrement pour la journée -1 (les enregistrements commencent avec 0 et non 1).

    Par exemple : 202005250001 ou 202005250085.

    Dans le INSERT je comprends que je dois prendre la date de la journée.... Après les 0 (comment ?) et ensuite le total de date actuelle dans la table que je vais enregistrer... pour cela je pense créer une table temporaire dans le leque je pourrai mettre les ID ayant la même date... ensuite faire un count de cette table pour connaître le total...

    Mais le professeur (formateur) demande de faire cela par une seule requête INSERT...

    Est-ce qu'une personne pourrait m'éclairer s.v.p. ????

    Merci.

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Je propose de faire déjà un select qui va retourner le total d'enregistrement pour la journée -1
    Une fois ce select trouvé, il suffit de préfixer le résultat par la date suivie des 0 (concaténation)
    Puis au final de faire un insert select ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Points : 155
    Points
    155
    Par défaut
    Bonjour ou bonsoir

    Je m'excuse du délai de ma réponse.

    Donc le résultat de la requête je la mets dans une variable. Ensuite on peut créer une autre variable pour créer la concaténation et on utilise cette dernière variable pour la commande INSERT. Sinon on oublie la dernière variable et on fait la concaténation dans la commande INSERT.

    Je vois la solution

    Merci beaucoup

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 057
    Points
    19 057
    Par défaut
    Salut à tous.

    Il ne s'agit pas de variables, mais de colonnes.

    Vous avez quatre choses à faire :

    1) récupérer la date du jour sous le format 'YYYYMMDD'. C'est pas très compliqué à faire.
    --> https://dev.mysql.com/doc/refman/8.0...on_date-format

    Utiliser la fonction suivante, ne peux pas vous convenir car vous avez des tirets comme séparateur :
    --> https://dev.mysql.com/doc/refman/8.0...nction_curdate

    Ni celle-ci :
    --> https://dev.mysql.com/doc/refman/8.0...l#function_now

    Cette date sert pour la première partie du remplissage du résutat à produire.


    2) récupérer le nombre d'enregistrements :
    --> https://dev.mysql.com/doc/refman/8.0...ting-rows.html

    Cette fonction va vous retourner le nombre de lignes suivant le critère que vous allez utiliser.
    L'astuce est justement de ne pas utiliser de requête SELECT pour obtenir le résultat recherché.
    Pour ce faire, vous devez utiliser la fonction :
    --> https://dev.mysql.com/doc/refman/8.0...ml#function_if
    en précisant la condition de sélection de vos lignes.
    Dans votre cas, il s'agit de la date du jour !

    En cherchant un peu sur le net, on trouve facilement une solution :
    --> https://stackoverflow.com/questions/...in-mysql-query
    Il en existe d'autres !


    3) le résultat du nombre d'enregistrements ne sera pas formaté comme vous le désirez.
    Autrement dit, vous désirez un nombre sur quatre chiffres.
    Pour ce faire, vous devez concaténer une chaîne de caractères contenant que des zéro, avec le résultat précédent.
    Puis récupérer sur la droite, que quatre caractères.
    La fonction qui permet de faire la concatenation est :
    --> https://dev.mysql.com/doc/refman/8.0...unction_concat

    et la fonction qui permet de tronquer sur une longueur donnée, à partir de la droite est :
    --> https://dev.mysql.com/doc/refman/8.0...function_right


    4) il reste un quatrième chose à faire, convertir le résultat de votre chaîne de caractères ne contenant que des chiffres dans le type integer.
    --> https://dev.mysql.com/doc/refman/8.0...#function_cast


    Y a plus qu'à écrite la requête insert en reprenant tous les points ci-dessus.

    @ vttman : tu n'as pas bien lu l'énoncé du sujet. Cela ne doit pas se faire dans un select mais dans un insert !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    @ vttman : tu n'as pas bien lu l'énoncé du sujet. Cela ne doit pas se faire dans un select mais dans un insert !

    @+
    @ Artemus , Vttman il maintient ce qu'il a proposé ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par angelevil Voir le message
    Pour un travail d'apprentissage j'ai un exercice qui demande de créer par requête INSERT un ID VARCHAR(12) composé par ceci : 20200525 (date actuelle par exemple ) une série de 0 (zéro) et un integer qui représente le total d'enregistrement pour la journée -1 (les enregistrements commencent avec 0 et non 1).

    Par exemple : 202005250001 ou 202005250085.
    Bonjour,

    C'est un exercice vraiment à la c@n !
    • le nombre de lignes (et non pas d'enregistrements) d'une journée, même échue, peut changer : cas d'espèce, correction de bugs, chargement en différé de lignes issues d'un système tiers... Donc, l'identifiant calculé à un instant "t" aura une valeur erronée à "t+1"
    • l'attribut ainsi construit n'est pas scalaire, dérogeant donc à la première forme normale. Il n'est pas nécessaire de concaténer plusieurs valeurs dans une même colonne. Un identifiant peut tout à fait être multi colonne.
    • si en plus cet identifiant a pour vocation à être l'identifiant primaire, c'est encore pire : l'id primaire doit être stable et donc asémantique
    • dans tous les cas, un identifiant de type integer sera moins encombrant et plus performant qu'un char ou pire, un varchar
    • dans tous les cas, stocker des zéros non significatifs ne présente aucun intérêt autre qu'encombrer la table inutilement
    • puisque le résultat de cette concaténation aberrante fera toujours 12 caractères, du char(12) sera plus performant que du varchar(12)

Discussions similaires

  1. [XL-2007] Création d'une liste de grande taille avec date incrémentée
    Par okoama dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2012, 13h43
  2. Création table avec x enregistrements incrémentés
    Par stsym dans le forum VBA Access
    Réponses: 10
    Dernier message: 30/05/2011, 18h50
  3. Création graph avec heure et date
    Par K-RK-S dans le forum LabVIEW
    Réponses: 4
    Dernier message: 19/11/2010, 11h45
  4. Renommer des feuilles avec date et n° incrémenté
    Par dioubiban dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/02/2009, 11h47
  5. Création requête avec gestion de date
    Par MELINE dans le forum Access
    Réponses: 1
    Dernier message: 30/09/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo