Partage
  • Partager sur Facebook
  • Partager sur Twitter

Concaténer un numéro automatique avec la date du jour

Sujet résolu
    25 juillet 2011 à 12:26:39

    Bonjour

    Je voudrai que la clef primaire d'une table soit la concaténation d'un numéro automatique et la date du jour (sans délimiteur).

    exemple:
    numéro automatique=3 et date du jour: 25/07/2011, la clef primaire sera 325072001

    Comment serai la requette sql de création de cette table?
    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2011 à 13:51:05

      requête de création ???
      Elle n'aurait rien de différent par rapport à d'habitude :
      il te faut 2 colonnes (une autoincrément et l'autre de type date)

      Pour obtenir ce que tu veux:
      tu fais une requête SELECT avec la fonction CONCAT
      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2011 à 14:34:56

        Pourrais tu me donnée un exemple ?
        J'ai essayé de faire comme tu l'as expliqué mais ça marche pas.
        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2011 à 14:45:49

          CREATE TABLE IF NOT EXISTS `t` (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `date` date NOT NULL,
            PRIMARY KEY (`id`)
          ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
          
          
          INSERT INTO `t` (`id`, `date`) VALUES
          (1, '2011-07-25');
          


          mysql> select * from t;
          +----+------------+
          | id | date       |
          +----+------------+
          |  1 | 2011-07-25 |
          +----+------------+
          1 row in set (0.00 sec)
          
          mysql> SELECT CONCAT(id, date) as MaColonne FROM t;
          +-------------+
          | MaColonne   |
          +-------------+
          | 12011-07-25 |
          +-------------+
          1 row in set (0.00 sec
          )
          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2011 à 14:51:24

            Si tu veux enlever les délimiteurs, il faut que tu concatène le jour, le mois et l’année avec YEAR(tadate), MONTH(tadate) ...

            Je ne sais pas si il existe de moyen plus simple si tu es sur mysql, je suis plutôt spécialiste SQL Server :p

            Edit : Peut être plus simple en convertissant en entier, a toi de tester
            • Partager sur Facebook
            • Partager sur Twitter
              25 juillet 2011 à 14:54:58

              ah je comprend maintenant .
              merci beaucoup a tous les 2.

              • Partager sur Facebook
              • Partager sur Twitter
                25 juillet 2011 à 14:57:48

                Ah oui, je n'avais pas vu les délimiteur ...
                On peut aussi utiliser la fonction REPLACE
                mysql> SELECT REPLACE(CONCAT(id, date),"-","") as MaColonne FROM t;
                +-----------+
                | MaColonne |
                +-----------+
                | 120110725 |
                +-----------+
                1 row in set (0.00 sec)
                • Partager sur Facebook
                • Partager sur Twitter
                  25 juillet 2011 à 14:59:41


                  Est t il possible d'avoir directement un seul champ dans la table qui concatène le numéro automatique et la date du jour?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 juillet 2011 à 15:08:49

                    rien n'est impossible
                    Néanmoins, je le déconseille vivement pour plusieurs raison :
                    • le numéro automatique devra entièrement être gérer par toi : les SGBD ne supporte que des types numériques
                    • on évite au maximum de stocker 2 informations dans une même colonne
                    • les recherches sur la date seraient beaucoup plus lente (puisqu'il faudrait alors ignorer l'id)
                    • les opérations de suppression, modification et insertion seraient plus complexe

                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 juillet 2011 à 16:18:45

                      Je vois .C'est juste pour avoir un seul champ comme clef primaire que j'ai voulu faire ainsi.
                      En prenant comme clef primaire un simple numéro automatique même avec un type bigint tôt ou tard ça va s’arrête au niveau de la valeur maximal qui est de (9 223 372 036 854 775 807) pour bigint.

                      Il y'a t-il un autre moyen d'avoir un seul champ comme clef primaire sans être limité a un niveau ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juillet 2011 à 16:30:41

                        Penses-tu vraiment insérer plus de 9223372036854775807 lignes dans un avenir proche ?

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Concaténer un numéro automatique avec la date du jour

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown