Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 10h01   #1
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
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 ++
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 12h08   #2
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 13h52   #3
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 68
Points : 26
Points : 26
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,
nponzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 08h39   #4
Invité de passage
 
Inscription : septembre 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 16
Points : 4
Points : 4
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
YvesTan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 11h20   #5
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 11h46   #6
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 68
Points : 26
Points : 26
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 ??
nponzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 16h58   #7
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
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/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 17h48   #8
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 68
Points : 26
Points : 26
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.
nponzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h42.


 
 
 
 
Partenaires

Hébergement Web