2010-10-14 2 views
2

Ici, je ne parviens pas à convertir la valeur booléenne en caractère dans une requête postgre sql.PostgreSql + Typecast de Boolean dans le type de caractère

SELECT *FROM ltl_class_nmfc_aliases 
WHERE ltl_class_nmfc_aliases.id 
NOT IN(SELECT ltl_class_nmfc_aliases_id FROM commodities_shippeds 
WHERE commodities_shipped_obj_type LIKE 'ClientOffice') 
OR ltl_class_id IS NULL 
AND lower(commodity_description_alias) LIKE E'%%' 
AND lower(ltl_value) LIKE E'%92.5%' 
AND hazardous :: integer LIKE E '%%' 
AND cast(schedule_b as character varying(255)) LIKE E'%%' 
AND cast(harmonized_tariff as character varying(255)) LIKE E'%%' 
ORDER BY commodity_description_alias,ltl_value LIMIT 25; 

Ici, je ne peux pas cataloguée à AND hazardous :: integer LIKE E '%%' me suggérer comment faire typecast?

Répondre

6

Pourquoi ne pas utiliser une instruction case?

(case when hazardous then 'Bad juju' else 'Ok.' end) as safety 

Vous pouvez également utiliser l'instruction cast:

postgres=# select cast(1 as boolean); 
bool 
------ 
t 

postgres=# select cast(0 as boolean); 
bool 
------ 
f 

postgres=# select cast('false' as boolean); 
bool 
------ 
f 

postgres=# select cast('False' as boolean); 
bool 
------ 
f 

postgres=# select cast('T' as boolean); 
bool 
------ 
t 

postgres=# select cast('F' as boolean); 
bool 
------ 
f 

postgres=# select cast('Y' as boolean); 
bool 
------ 
t 

postgres=# select cast('N' as boolean); 
bool 
------ 
f 

Il pourrait être:

select ... where ... and hazardous = cast(:your_variable as bool) 

Vous pouvez également jeter varchar:

select cast(hazardous to varchar)... 

Certaines base de données outil de pilote Les ations (comme BDE de Borland) s'interrompent car ils attendent une largeur de colonne explicite pour les champs varchar. Si vous filtrez simplement hazardous=true, utilisez simplement "ET dangereux".

+0

J'essaie le cas à ma fin mais je n'obtiens aucun succès. Je vais essayer votre code maintenant. – Rubyist

+0

SELECT * FROM ltl_class_nmfc_aliases LEFT OUTER JOIN ltl_class_nmfcs SUR ltl_class_nmfcs.id = ltl_class_nmfc_aliases.ltl_class_nmfc_id LEFT OUTER JOIN ltl_classes SUR ltl_classes.id = ltl_class_nmfcs.ltl_class_id OÙ ltl_class_nmfc_aliases.id PAS (SELECT ltl_class_nmfc_aliases_id DE commodities_shippeds OU commodities_shipped_obj_type LIKE 'ClientOffice') OU EST ltl_class_id NULL ET inférieur (commodity_description_alias) LIKE E '%%' ET inférieur (ltl_value) LIKE E '% 92.5%' ET cas si dangereux, alors 'Vrai' sinon 'Faux' fin ET cast (schedule_b comme caractère variable (255)) COMME E '%%'; – Rubyist

+0

ERREUR: l'argument de ET doit être de type booléen, ne pas taper le texte – Rubyist

Questions connexes