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

PostgreSQL Discussion :

Date non précise, quel type de champ ?


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Date non précise, quel type de champ ?
    Hello à tous,

    Je souhaite enregistrer des dates non précises : uniquement l'année ou uniquement le mois, l'heure... Ou la date complète.

    Avec Mysql, un champ datetime peux recevoir 2008-00-00 00:00:00 comme valeur (ou 0000-07-00 00:00:00)

    Comment faire avec PostgreSQL ?

    Merci ++

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par YvesTan Voir le message
    Avec Mysql, un champ datetime peux recevoir 2008-00-00 00:00:00 comme valeur (ou 0000-07-00 00:00:00)
    C'est parce qu'avec MySQL, niveau normes SQL et qualité de données, on repassera ... C'est comme ça que tu te retrouves avec des 30 février dans ta base ...

    0000-07-00 n'est pas une date valide, donc impossible de l'insérer, point bas.
    Ta date doit toujours être valide, si tu ne mets que l'année, il faut mettre par exemple arbitrairement YYYY-01-01 mais comment distinguer la date 2008-01-01 de l'année 2008 tout court ?

    Je pense que ton modèle de données est mauvais, si tu veux juste une année, un mois ou un jour, il faut des colonnes de type entier
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    effectivement, sur postgresql il semble qu'on ne puisse avoir le type "année d'une date" :
    http://sqlpro.developpez.com/cours/sqlaz/fonctions/

    mais on peut sélectionner une partie de date et donc l'année :
    http://sqlzoo.net/fun_datepart

    seul problème, il semble que ça ne soit valable que pour les sélection et comme le dit Scheu, il faut utiliser un entier si l'on veut entrer une année dans la base.

    à +

    cordialement,

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses. Je vais donc passer par des entiers !

    Dommage qu'il n'y ai pas quelques choses de prévu pour ça. Dans mon cas, il s'agit d'un base de données sur des évènements de l'antiquité dont on ne connais pas forcément la date exacte

  5. #5
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par YvesTan Voir le message
    Dommage qu'il n'y ai pas quelques choses de prévu pour ça.
    Heureusement plutôt, sinon tu te retrouverais avec plein de dates non valides comme dans MySQL ...
    Tu n'as qu'à créer 3 colonnes de type entier qui seraient année, mois, jour, et si par exemple pour une date tu ne connais que l'année, tu laisse les colonnes mois et jour à NULL, c'est le plus propre
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    est-ce pertinent de créer deux colonnes : l'une avec la date normale (ymd), et l'autre qui soit le résultat d'une requête qui sélectionne la date (juste l'année) de la 1ere colonne avec un déclencheur (sur la 1ere colonne) lors d'un insert ?

    je doute qu'on puisse faire un déclencheur sur une seule colonne.

    un déclencheur après update sur la même table, il parait que c'est pas très conseillé ???

    qu'en pensez vous ??

  7. #7
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Non, ça équivaut à faire une usine à gaz ... C'est comme ça qu'après tu te retrouves avec un mauvais modèle de données (en plus avec duplication inutile de données) et des perfs pourries dans quelques mois

    Si avant avec MySQL tu insérais des dates comme 0000-07-00, c'est que tu ne devais pas beaucoup utiliser les fonctions sur les dates ...
    Dans ce cas la solution la plus propre est celle que j'ai décrite, avec 3 colonnes de type entier. Et si pour une date tu connais l'année et le mois mais pas le jour par exemple, tu fais 2 inserts, pourquoi te compliquer la vie avec des triggers ?
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 68
    Points : 38
    Points
    38
    Par défaut
    Ok,

    bien reçu

    pour ma part je ne connais pas MySQL mais c'est vrai que les triggers alourdissent.

    merci pour tout à bientot,

    cordialement,

    nicolas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2008, 09h21
  2. Quel type de champs pour les case a cocher
    Par leroidje dans le forum Autres
    Réponses: 1
    Dernier message: 15/02/2008, 13h54
  3. [aide] Quel type de champs utiliser pour mettre un "+"
    Par lothar59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/03/2007, 14h05
  4. [MySQL] quel type de champ pour un tableau serializé
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 14h37
  5. [SQL Server] Quel type de champ pour du commentaire
    Par brmartin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/07/2006, 12h51

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