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

Langage SQL Discussion :

Colonne de type Datetime


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut Colonne de type Datetime
    Bonjour,
    J'ai un problème avec le type DateTime. Est-il possible de stocker une date qui n'a pas de jour, du style 11/2008
    Je n'y arrive pas puisque automatiquement le jour est rempli à 01
    Idem pour stocker uniquement une année. Bref ce que j'aimerais c'est pourvoir stocker les dates suivantes :
    2008
    11/2008
    03/11/2008

    Merci bp pour votre aide
    Cédric

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 788
    Points : 52 806
    Points
    52 806
    Billets dans le blog
    5
    Par défaut
    Un type SQL suppose une valeur vraie. Ce n'est pas des caractères que tu stocke !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    La seule solution à mon avis : créer trois colonnes, 'Annee', 'Mois', 'Jour'.
    Comme ça tout est possible.
    Bien sûr il faudra prévoir des contrôles parce qu'un jour sans mois ni année ça n'a pas de sens. Idem pour un mois sans année.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    c'est ce que je voulais éviter mais je ne vois pas d'autre solution

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    Quel est le problème à stocker vos années en 01/01/2008 ou vos mois en 01/11/2008 ?

    SQL propose toutes les fonctions d'extraction nécessaires.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Le problème est probablement : Comment savoir si la date enregistrée est bien le 01/11/2008 ou bien seulement le mois 11/2008 !

    Comme on ne connaît pas l'importance de la précision...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Citation Envoyé par CinePhil Voir le message
    Le problème est probablement : Comment savoir si la date enregistrée est bien le 01/11/2008 ou bien seulement le mois 11/2008 !

    Comme on ne connaît pas l'importance de la précision...
    Si ce n'est que ça, tu peux utiliser les heures/minutes/secondes pour flagger ça
    (Comment ça c'est laid ?)

    [EDIT]
    Allez, un exemple :
    01/11/2008 0 heure => 2008
    01/11/2008 1 heure => 11/2008
    01/11/2008 2 heures => 01/11/2008

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 788
    Points : 52 806
    Points
    52 806
    Billets dans le blog
    5
    Par défaut
    Si ce n'est que ça, tu peux utiliser les heures/minutes/secondes pour flagger ça
    C'est vraiment pas le genre de conseil à donner.

    Le mieux est d'implémenter une date et une durée en jour.
    COL_DATE DATE NOT NULL,
    COL_DUREE_JOUR INT NOT NULL DEFAULT 1 CHECK (VALUE > 0)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Merci pour vos réponses. J'ai oublié un petit détail, une colonne de type date peut faire partie d'un vue. Et je voudrait éviter ceci :

    03/12/2008 : ok
    12/2008, il faut que dans la vue il y ait 12/2008 et non pas /12/2008
    2008, il faut que dans la vue il y ait 2008 et non pas //2008

    le fait de passer par 3 colonnes (jour, mois, année) pose ce problème pour l'affichage dans la vue

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    Avec une solution similaire à celle proposée par SQLPro, dans votre vue vous castez votre date en varchar au format dont vous avez besoin en fonction de la colonne type période.

    Si la colonne type période vaut, 1 pour jour, 2 pour mois et 3 pour année vous pourrez par exemple utiliser ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE COL_TYPE_PERIODE
      WHEN 1 THEN CONVERT(VARCHAR(10), COL_DATE , 101)
      WHEN 2 THEN RIGHT(CONVERT(VARCHAR(10), COL_DATE , 101), 7)
      WHEN 3 THEN RIGHT(CONVERT(VARCHAR(10), COL_DATE , 101), 4)
    END
    Mais attention, ce sera une chaîne de caractère à vocation d'affichage uniquement.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Faudra que je teste. Je trouve que c'est bien compliqué qd meme la gestion des dates. Il y a que moi qui ai ce genre de problème?

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    C'est votre problème initial qui est je pense mal modélisé, n'hésitez pas à l'exposer d'une manière plus globale : ici vous nous présentez les difficultés que vous avez à mettre en place la technicité de la solution que vous avez imaginé.

    Un champ date est un champ date avec un format date.
    Vous confondez (comme beaucoup) ce dernier avec l'affichage qu'on peut en faire.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Ben je ne pense pas confondre. Que ca soit 16/12/2008, 12/2008, 2008 ce sont des dates, sauf que la personne peut ne pas connaitre le jour ou le mois.

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    Ben je ne pense pas confondre. Que ca soit 16/12/2008, 12/2008, 2008 ce sont des dates, sauf que la personne peut ne pas connaitre le jour ou le mois.
    Donc il faut trois colonnes.

    Pour reconstituer la date pour l'affichage :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CASE 
      WHEN Mois IS NULL THEN Annee
      WHEN Jour IS NULL THEN Mois || '/' || Annee
      ELSE Jour || '/' Mois || '/' || Annee
    END AS AfficheDate
    FROM TaTable
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 817
    Points
    17 817
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    Ben je ne pense pas confondre. Que ca soit 16/12/2008, 12/2008, 2008 ce sont des dates
    Je plains la personne a qui vous avez donné rendez-vous à la date de 2008, elle va vous attendre longtemps !

    2008 est une année, décembre 2008 un mois, le 16 décembre 2008 un jour.
    Ce sont des caractéristiques d'une date oui, mais une date non.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    je confirme que pour moi en tout cas 2008 est une date, mais une année si on est plus précis.

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Je ne sais pas à quoi se rattache exactement votre date mais je me suis posé le même genre de problème pour une base de données personnelle sur des films de cinéma (étrange hein ? ).

    1) Année de tournage : 2007
    Pas de problème : colonne F_Annee de type entier. Encore que, le tournage peut être étalé sur plusieurs années (2007-2008). On fait comment ? Colonne de type VARCHAR ? On ne fera pas d'opération sur cette colonne ; l'âge d'un film n'est pas spécialement pertinente comme information. On peut trier par année donc ça peut marcher.

    2) Date de sortie en France : 17/12/2008

    Ah ouais mais si on ne connait pas encore la date de sortie future avec précision (en 2008, en novembre 2008) ou si la date passée n'est pas connue avec précision, on fait comment ? Là encore, une colonne VARCHAR ou 3 colonnes.

    Tout dépend ce qu'on va faire de l'info. S'il s'agit juste de l'afficher, VARCHAR est suffisant. Si on veut trier sur la date ou faire des calculs, il vaut mieux utiliser 3 colonnes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Merci beaucoup pour ta réponse. La date va servir a l'affichage mais aussi à trier. Sauf que le tri se fera sur la date "reconstituée". Dans l'idée 3 colonnes parait plus interressant, mais étant donnée que la date sera affichée dans une vue je pense qu'il est préférable de passer par une seule colonne de type varchar. (sinon je vais avoir des problèmes pour afficher 12/2008 et non pas /12/2008 s'il n'y a pas de jour par exemple).
    Encore merci beaucoup pour ton aide
    Cédric

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Cedric33 Voir le message
    (sinon je vais avoir des problèmes pour afficher 12/2008 et non pas /12/2008 s'il n'y a pas de jour par exemple).
    Sauf que je t'ai donné une solution à la page précédente pour afficher ça correctement.
    Bien sûr, il faudra veiller dans ton programme à ce que la date soit correctement enregistrée dans la base (pas de jour sans mois et année et pas de mois sans année).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Oui j'avais vu mais je ne vois aps comment l'intégrer dans la creation d'une vue ce code.

Discussions similaires

  1. Modifier une colonne d'une table de type Datetime en production
    Par jsylvestre dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/03/2015, 11h16
  2. Intervalle de type datetime avec colonnes date et time
    Par Madfrix dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/03/2011, 23h58
  3. Réponses: 3
    Dernier message: 12/03/2009, 14h41
  4. DatagridView auto et colonne type DateTime (calendar)
    Par Yogy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/03/2008, 10h30
  5. requete vers une colonne de type datetime
    Par Zorgz dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2003, 12h37

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