PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Order by et signe particulier (& , . )

Technique - général | Order by et signe particulier (& , . )

Par zedzed le 16/08/2007 - 09:16

Bonjour tout le monde,

J'ai un petit probleme sur une requete tout simple. La clause order by me classe correctement les résultats sauf ceux contenant un signe particulier comme & et .
il fait comme si le caractére n'existait pas. exemple: abc a&bd abe
Je suppose que je ne suis pas le seul à avoir eu ce probléme mais impossible de trouver sur le forum ou sur le net.
Le type de données pour ce champ est character varying et la version de postgresql 8.1.9

Séb

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Précisions SVP

Jean-Paul Argudo/ = 17 Août, 2007 - 11:26

Bonjour,

Je suspecte pour ma part un problème dans l'initialisation de votre base de données: que vaut lc_collate? Chez moi:

test=# show lc_collate;
lc_collate
-------------
fr_FR.UTF-8
(1 ligne)

Que vaut client_encoding? Chez moi:

test=# show client_encoding;
client_encoding
-----------------
LATIN9
(1 ligne)

Enfin, voici ce que cela donne chez moi:

test=# select * from test_order where pouet ~ '^a' order by pouet;
pouet
-------
a
abac
abc
a&bc
ab&c
(5 lignes)

Pouvez-vous faire ces essais et me dire ce que cela donne chez vous?

Merci!

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


Merci pour la réponse ! J

zedzed/ = 17 Août, 2007 - 13:18

Merci pour la réponse !

J'ai essayé avec votre exemple, j'ai exactement la même chose que vous :
select * from test order by merchant_name;
merchant_name
---------------
a
abac
abc
a&bc
ab&c
(5 rows)

Par contre si je rajoute un enregistrement "a&b" j'obtiens :
select * from test order by merchant_name;
merchant_name
---------------
a
a&ab
abac
abc
a&bc
ab&c
(6 rows)

il ne me regroupe pas les "a&" ensemble.
J'ai essayé de modifier la valeur de client_encoding qui etait à "UNICODE" en utf-8 ou en latin9
Aucun changement
lc_collate est à "fr_FR.UTF-8" par défaut lors de la création de la base de données je n'y ai pas touché.

Seb


translate

Jean-Paul Argudo/ = 22 Août, 2007 - 09:51

Bonjour,

J'ai essayé en créant un cluster postgres avec un LANG=C, afin que lc_collate soit à 'C'. Cela n'a rien changé.

Je vous propose le contournement suivant, dans votre clause order by:
order by translate(merchant_name,'&.','ab'). Cela donnera plus de "poids" à "&" puisque remplacé par "a". Si vous voulez donner plus de "poids" à ".", faites l'inverse ('ba' au lieu de 'ab').

En espérant que cela vous permette d'avancer dans votre projet, pendant que je cherche une solution plus élégante.

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.