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 20/06/2005, 16h46   #1
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
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 :

Citation:
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
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2005, 17h20   #2
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
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
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2005, 17h25   #3
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
en fait ca marche, merci Julie
en Postgres, la norme veut que ca se fasse ainsi : la valeur :: letype
Code :
SELECT 'client'::text AS libelle, count(*) FROM tclient;
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2005, 17h27   #4
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
merci
Honte sur moi de ne pas avoir trouvé dans la doc
bouh

en tout cas encore merci
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2005, 18h26   #5
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
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 :
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 :
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 :
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)
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2005, 09h34   #6
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
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
Citation:
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:
Citation:
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
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2005, 09h43   #7
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
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
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2005, 18h15   #8
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
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 :
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 :
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.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2005, 09h35   #9
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
génial ça marche

T'es une vraie championne champijulie

Merki
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h49.


 
 
 
 
Partenaires

Hébergement Web