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 :

forcer le typer d'un champ


Sujet :

PostgreSQL

  1. #1
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut forcer le typer d'un champ
    Bonjour,

    je voudrais "forcer" le type d'un champ. Je m'explique (un petit exemple sera plus parlant)

    Je veux effectuer ce type de requete :

    SELECT 'client' AS libelle, count(*) FROM tclient;
    Je vroudrais forcer le champ libelle à varchar car lorsque je fais cela, il me met ce champ comme un champ text

    Existe-t-il une solution ?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Par défaut
    Dans ce cas, voici ce que tu peut faire (plus de renseignements dans le chapitre 10.1 de la traduc de l'aide des version 8.x):

    Select varchar 'Client' AS "libelle", count(*) FROM tclient;

    J'espère que ça pourra t'aider.
    champijulie

  3. #3
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    en fait ca marche, merci Julie
    en Postgres, la norme veut que ca se fasse ainsi : la valeur :: letype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'client'::text AS libelle, count(*) FROM tclient;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    merci
    Honte sur moi de ne pas avoir trouvé dans la doc
    bouh

    en tout cas encore merci

  5. #5
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    c'est re-moi
    donc vos 2 techniques marchent nikel. Par contre j'ai un comportement bizarre avec le varchar. Je vous explique : ma requete est formée de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 'Entreprises' AS libelle, count(*) AS total FROM tentreprise UNION
    SELECT 'Contacts' AS libelle, count(*) AS total FROM tcontact ...
    On est d'accord que si je ne mets pas varchar le champ libelle est de type text sinon il est de type varchar. Juste qu'ici tout va bien
    Par contre si j'exécute une requete de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM count_record WHERE libelle LIKE 'Entreprises';
    j'ai une grosse différence si j'utilise du text ou du varchar

    Les résultats sont bizarres si c'est du text cela me renvoit bien Par contre si j'utilise du varchar, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Entreprises 13000
    Contacts        0
    ...             0
    (alors que j'ai quand même des enregistrements dans ma table tcontact)

    Je ne comprends pas ce comportement

    Merci de votre aide (j'espère que j'ai été assez clair)

  6. #6
    Membre confirmé Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Par défaut
    Je suppose que ta table count_record est celle qui resulte de l'union des deux autres dont le code est donné plus haut c'est à dire
    SELECT 'Entreprises' AS libelle, count(*) AS total FROM tentreprise
    UNION
    SELECT 'Contacts' AS libelle, count(*) AS total FROM tcontact ...
    Dans ce cas, si tu fait la requête suivante:
    SELECT * FROM count_record WHERE libelle LIKE 'Entreprises';
    Alors c'est normal que tes contacts et le reste apparaissent à zéro car tu ne selectionne que les enregistrments dont le libellé est Entrprises et non Contacts (ou autre).
    Avec le type text, il te renvoie juste les entreprises ou il te renvoie aussi le nombre de contacts?

    Voilà j'espère que ça t'aidera un petit peu.
    champijulie

  7. #7
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    justement avec un champ text il ne me renvoit que les entreprises (ce que je cherche à avoir) et je ne vois pas pourquoi c'est différent avec un varchar mais merci quand même. Si quelqu'un a une explication je suis toujours preneur

  8. #8
    Membre confirmé Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Par défaut
    Apparement, le fait de convertir le type dans l'union fait qu'il pense que libelle est deux variables différentes. Je m'explique:
    J'ai tappé la requête suivante qui est l'équivalente des tiennes avec des noms différents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select *
    FROM (Select 'NOMDOSSIER'::varchar as "libelle", count (*) as "total" 
          FROM ddc_appia."DOSSIER"
    	UNION 
          Select 'LIBELLEETAT'::varchar as "libelle", count (*) as "total" 
    	FROM ddc_appia."ETAT")count_record
    Where "libelle" LIKE 'NOMDOSSIER';
    Et j'obtiens effectivement le même résultat que toi. Postgre jugerai (conditionnel mais pas sur du tout) que les deux variables même si elle ont le même noms sont différentes et il ne peut pas procéder à l'union.
    Maintenant, si tu tappes la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select "libelle"::varchar, total
    FROM (Select 'NOMDOSSIER' as "libelle", count (*) as "total" 
          FROM ddc_appia."DOSSIER"
    	UNION 
          Select 'LIBELLEETAT' as "libelle", count (*) as "total" 
    	FROM ddc_appia."ETAT")count_record
    Where "libelle" LIKE 'NOMDOSSIER';
    Il te renvoit le même résultat qu'avec les variables text.

    Conclusion, un forcage de type se fait en requête finale et non dans une sous-requête.
    Bon courage
    champijulie.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Par défaut
    génial ça marche

    T'es une vraie championne champijulie

    Merki

Discussions similaires

  1. Forcer l'affichage d'un champ
    Par alexandrebergercyr dans le forum IHM
    Réponses: 7
    Dernier message: 12/03/2007, 20h08
  2. [C# 2.0] Forcer la validation d'un champ
    Par oodini dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/07/2006, 18h47
  3. Forcer la taille d'un champ en HTML
    Par Rei Angelus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/03/2006, 16h28
  4. forcer l'écriture d'un champ de formulaire
    Par goma771 dans le forum Langage
    Réponses: 7
    Dernier message: 21/02/2006, 18h32
  5. Réponses: 2
    Dernier message: 17/10/2005, 10h29

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