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

MySQL Discussion :

Champ date avec ou sans jour/mois


Sujet :

MySQL

  1. #1
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut Champ date avec ou sans jour/mois
    Bonjour, j'aimerais utiliser un champ date afin de stocker une date de sortie. Jusque là pas de problèmes, mais par moment je ne dispose que du mois et de l'année, voir que de l'année de sortie du produit. Au final, je me retrouve alors avec une fausse date. Je voudrais savoir quelle serait la solution afin de permettre de sauvegarder une date en fonction des informations dont je dispose.

    La seule piste que j'ai trouvé serait de créer un champ différent pour le jour, le mois et l'année. Qu'en pensez-vous ?

    Merci !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ou stocker la date incomplète en y ajoutant le premier jour du mois ou de l'année...
    Et, si cette précision est nécessaire, avoir une colonne supplémentaire qui spécifie le niveau de "qualité" de la date (J ou M ou A).
    Ce qui permet de conserver toutes les capacités de calcul autour du type DATE.

    Exemple :
    Date connue     Date enregistrée    Indicateur
    27/04/2017      27/04/2017          J
    04/2017         01/04/2017          M
    2017            01/01/2017          A
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Shinja.

    Citation Envoyé par Shinja
    La seule piste que j'ai trouvé serait de créer un champ différent pour le jour, le mois et l'année. Qu'en pensez-vous ?
    Non, ce n'est pas une bonne solution.

    Vous avez une date qui se présente sous trois formes :
    --> que l'année
    --> l'année et le mois
    --> une date normalement constituée.

    qu'est-ce qui vous empêches de mettre :
    --> pour l'année 2017 : "2017-01-01".
    --> pour l'année 2017 et le mois d'avril : "2017-04-01".

    Voici un exemple pour mettre en forme vos dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    --------------
    set @date_1 = "2017"
    --------------
     
    --------------
    set @date_2 = "04/2017"
    --------------
     
    --------------
    set @date_3 = "17/04/2017"
    --------------
     
    --------------
    select str_to_date(right(concat("01/01/", @date_1), 10), "%d/%m/%Y")
    --------------
     
    +---------------------------------------------------------------+
    | str_to_date(right(concat("01/01/", @date_1), 10), "%d/%m/%Y") |
    +---------------------------------------------------------------+
    | 2017-01-01                                                    |
    +---------------------------------------------------------------+
    --------------
    select str_to_date(right(concat("01/01/", @date_2), 10), "%d/%m/%Y")
    --------------
     
    +---------------------------------------------------------------+
    | str_to_date(right(concat("01/01/", @date_2), 10), "%d/%m/%Y") |
    +---------------------------------------------------------------+
    | 2017-04-01                                                    |
    +---------------------------------------------------------------+
    --------------
    select str_to_date(right(concat("01/01/", @date_3), 10), "%d/%m/%Y")
    --------------
     
    +---------------------------------------------------------------+
    | str_to_date(right(concat("01/01/", @date_3), 10), "%d/%m/%Y") |
    +---------------------------------------------------------------+
    | 2017-04-17                                                    |
    +---------------------------------------------------------------+
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut
    Merci, je vais me diriger vers cette approche. Dans le cas où j'ai une date 2017-01-01 comment savoir si c'est une date complète ou le contraire ? C'est assez rare qu'un produit sorte ce jour là, mais bon on ne sait jamais ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Apparemment, ma réponse d'hier n'était pas claire...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre habitué
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Apparemment, ma réponse d'hier n'était pas claire...
    Sisi, je répondais à Artemus24, car dans son exemple il ne dis pas de créer un champ pour indiquer la précision de la date. Je vais utiliser ta solution donc !

  7. #7
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Citation Envoyé par Shinja
    par moment je ne dispose que du mois et de l'année, voir que de l'année de sortie du produit. Au final, je me retrouve alors avec une fausse date.
    Vous dites que vous avez un problème mais l'on ne sait pas trop ce que vous désirez faire avec cette date.
    La solution que je vous propose est de formater correctement la date de façon à pouvoir l'exploiter par la suite.
    Au final, vous aurez une colonne avec le type "date" et donc quelque chose d'exploitable avec MySql.

    Dans le cas d'une date partielle, vous êtes obligé d'utiliser le format char, avec quelque chose d'inexploitable.

    Citation Envoyé par Shinja
    Je voudrais savoir quelle serait la solution afin de permettre de sauvegarder une date en fonction des informations dont je dispose.
    Je vous retourne la question. Que désirez-vous faire avec cette date ?

    Si vous avez "2017", est-ce que la date "2017-01-01" vous convient ou pas ?
    Si vous avez "04/2017", est-ce que la date "2017-04-01" vous convient ou pas ?
    Si vous avez "17/04/2017", est-ce que la date "2017-04-17" vous convient ou pas ?

    Si c'est non, pourquoi ? Qu'est-ce qui vous dérange ?

    Citation Envoyé par Shinja
    La seule piste que j'ai trouvé serait de créer un champ différent pour le jour, le mois et l'année. Qu'en pensez-vous ?
    Bien sûr que l'on peut éclater la date en jour mois et année, mais qu'allez-vous faire ensuite ?

    Citation Envoyé par Al1_24
    Ou stocker la date incomplète en y ajoutant le premier jour du mois ou de l'année...
    C'est ce que j'ai proposé dans mon exemple, mais il semble que cela vous dérange, non ?

    Citation Envoyé par Shinja
    Dans le cas où j'ai une date 2017-01-01 comment savoir si c'est une date complète ou le contraire ?
    Est-ce vraiment important de faire la distinction entre une date complète et une date partielle ?

    Une solution consiste à utiliser un indicateur comme le propose Al1_24 qui va vous indiquer la nature de votre date.
    --> J pour le jour, le mois et l'année sont renseignés.
    --> M pour le mois et l'année sont renseignés.
    --> A pour l'année est renseigné.

    Mais après, qu'allez-vous faire avec cette information ? A mon avis, rien du tout.
    Car si la date est partielle, et que personne ne sait comment la renseigner, elle restera toujours partielle.
    Donc votre indicateur ne sert à rien.

    Citation Envoyé par Shinja
    Sisi, je répondais à Artemus24, car dans son exemple il ne dis pas de créer un champ pour indiquer la précision de la date.
    Répondez à la question de l'usage que vous allez faire de cette date.

    Citation Envoyé par Shinja
    Je vais utiliser ta solution donc !
    La solution d'Al1_24 vous renseigne sur la nature de votre date, mais cette date est inexploitable par la suite.

    Qui va faire en sorte de renseigner correctement votre date partielle ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/05/2016, 10h36
  2. Réponses: 3
    Dernier message: 31/01/2011, 18h26
  3. Réponses: 2
    Dernier message: 21/09/2009, 14h20
  4. [Dates] Champs date avec slash
    Par bahaaldine dans le forum Langage
    Réponses: 1
    Dernier message: 21/02/2007, 08h28
  5. composant de calcul [champ date] avec rave report
    Par segnac dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2005, 19h08

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