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 :

Problème de contrainte sur une partie de date (l'année)


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Par défaut Problème de contrainte sur une partie de date (l'année)
    Bonjour,

    Je suis face à un problème que je n'arrive pas a résoudre depuis quelques jours.
    Ce problème les contraintes sous PostGreSQL.

    Je m'explique, prenons l'exemple suivant :
    une table "my_table" avec deux champs
    - my_number de type numérique
    - my_date de type date

    Ce que je cherche à faire est de mettre une contrainte pour interdire d'avoir plus d'un couple
    (my_number, année (my_date)).

    J'ai essayé avec EXTRACT mais rien n'y fait ca marche pas.

    voici plusieurs essais infructueux :

    ===============================================

    CREATE TABLE my_table (
    my_number NUMERIC(4),
    my_date DATE,
    PRIMARY KEY (my_number, EXTRACT (YEAR FROM my_date))
    )

    msg erreur
    -------------
    psql:tmp.sql:5: ERROR: syntax error at or near "(" au caractÞre 102
    psql:tmp.sql:5: LIGNE 4 : PRIMARY KEY (my_number, EXTRACT (YEAR FROM my_date))

    ===============================================

    CREATE TABLE my_table (
    my_number NUMERIC(4),
    my_date DATE,
    UNIQUE (my_number, EXTRACT (YEAR FROM my_date))
    )

    msg erreur
    -------------
    psql:tmp2.sql:6: ERROR: syntax error at or near "(" au caractÞre 97
    psql:tmp2.sql:6: LIGNE 4 : UNIQUE (my_number, EXTRACT (YEAR FROM my_date))

    ===============================================

    CREATE TABLE my_table (
    my_number NUMERIC(4),
    my_date DATE,
    UNIQUE (my_number, date_part('year', my_date))
    )

    msg erreur
    -------------
    psql:tmp3.sql:7: ERROR: syntax error at or near "(" au caractÞre 98
    psql:tmp3.sql:7: LIGNE 4 : UNIQUE (my_number, date_part('year', my_date))

    ===============================================

    A chaque fois c'est la fonction EXTRACT qui pose problème, ca fonctionne bien pour les select mais pas pour les contraintes et je n'ai pas trouvé d'équivalence.

    Voila, si vous avez une idée elle est la bienvenue.

    Merci d'avance

    Shefla

  2. #2
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Hello,

    Je pense que c'est juste impossible à faire.
    En tous cas, je ne vois pas du tout comment il est possible de créer un index sur une valeur calculée.
    Je pense que la seule solution est d'avoir une colonne de plus ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Par défaut
    Merci de ta réponse Spoutnik

    J'ai déja pensé à faire une colonne de plus
    Pis ben c pas optimal
    soit ya une colonne date et une année
    et faut gérer la synchronisation des deux champs
    soit on coupe la date en trois champs pis ben la il n'y a plus de controle de la date

    enfin, je pense que si je ne trouve rien de mieux je vai conserver l'idée un champ date et un année.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Par défaut
    Est-ce qu'il existe une fonction pour vérifier qu'une date est valide ?
    Comme ca je fais trois champs et je met la vérification dans un check

Discussions similaires

  1. [MLD] problèmes de FK sur une partie de PK
    Par Spoutnik dans le forum Schéma
    Réponses: 4
    Dernier message: 14/10/2011, 19h19
  2. Problème de flitre sur une date pour la création d'un recordset
    Par psykodumarteau dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/09/2008, 08h11
  3. Filtre sur une partie de la date
    Par souminet dans le forum Débuter
    Réponses: 1
    Dernier message: 12/05/2008, 10h31
  4. contraintes sur une date !!
    Par hiko-seijuro dans le forum Oracle
    Réponses: 2
    Dernier message: 12/12/2005, 08h31
  5. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 11h19

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