Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à vous,
j'ai un problème lorsque je tente d'effectuer une requête select avec ORDER BY sur un champs de type hstore.
Certaines lignes ne possèdent pas tous les attributs du HSTORE, du coup lorsque je fais mon ORDER BY, si le champs n'existe pas dans le hstore, une erreur sort.
Voici la requête : (le champ hstore est "list_attributes)
ma_base => SELECT id, list_attributes FROM client_data WHERE deleted<>1 AND client_data_type_id=2 ORDER BY (list_attributes->'8')::int DESC;
ERROR: invalid input syntax for integer: ""
ma_base => SELECT id, list_attributes FROM client_data WHERE deleted<>1 AND client_data_type_id=2;
-[ RECORD 1 ]---+-------------------------------------------------------------------------------------------------------------------------
id | 89
list_attributes | "3"=>"MON BLOC SANS TAILLE 2", "8"=>"", "14"=>"", "16"=>NULL, "19"=>""
-[ RECORD 5 ]---+-------------------------------------------------------------------------------------------------------------------------
id | 64
list_attributes | "3"=>"Quatrième bloc", "15"=>"1"
-[ RECORD 6 ]---+-------------------------------------------------------------------------------------------------------------------------
id | 63
list_attributes | "3"=>"MON 3EME BLOC", "8"=>"54", "14"=>"", "15"=>"1", "16"=>NULL, "19"=>"ceci est mon 3eme bloc"
On voit notamment que la ligne 64 ne possède pas l'attribut "8". Si toutes les lignes avaient cet attribut, même pour valeur nulle, le tri fonctionnerait sans problème.
Y a t-il un moyen d'effectuer une condition afin de ne faire le order by seulement si le champ existe ou quelque chose du genre?
Merci beaucoup par avance!
Dernière modification par DjangoPuccino (04/08/2014 15:21:14)
Hors ligne
Comme apparemment vous avez résolu tout seul votre problème, ce serait sympa de partager votre solution.
Guillaume.
Hors ligne
En fait, dans les données, on peut voir que l'attribut "8" du HSTORE avait pour valeur une chaine de caractère vide "". C'était le problème.
J'ai modifié mon code afin que lors de l'enregistrement des données, si la valeur est nulle, le champ contiendra NULL et non une chaine vide. Grâce à cela, PostgreSQL n'a plus de problème pour caster en INT.
Merci à vous et désolé pour l'oubli.
Hors ligne
OK, parfait. Merci.
Guillaume.
Hors ligne
Pages : 1