2010-10-14 2 views
2

Здесь я не могу преобразовать значение boolean в символ в postgre sql query.PostgreSql + Typecast of Boolean to Character Type

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; 

Здесь я не могу типаж в AND hazardous :: integer LIKE E '%%' Предложите мне, как сделать приведение типа?

ответ

6

Как насчет использования инструкции case?

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

Вы можете также использовать 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 

Так это может быть:

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

Вы также можете бросить в VARCHAR:

select cast(hazardous to varchar)... 

Некоторые базы данных драйвер (например, BDE из Borland) захлестнули это, потому что они ожидают явной ширины столбца для полей varchar.

Если вы просто фильтруете для hazardous=true, используйте только «И опасно».

+0

Я делаю попытку на моем конце, но я не получаю никакого успеха. Я собираюсь попробовать ваш код сейчас. – Rubyist

+0

SELECT * FROM ltl_class_nmfc_aliases LEFT OUTER JOIN ltl_class_nmfcs ПО ltl_class_nmfcs.id = ltl_class_nmfc_aliases.ltl_class_nmfc_id LEFT OUTER JOIN ltl_classes НА ltl_classes.id = ltl_class_nmfcs.ltl_class_id ГДЕ ltl_class_nmfc_aliases.id НЕ В (ВЫБРАТЬ ltl_class_nmfc_aliases_id ОТ commodities_shippeds ГДЕ commodities_shipped_obj_type LIKE 'ClientOffice') ИЛИ ltl_class_id IS NULL И ниже (товар_реклама) LIKE E '%%' И нижняя (ltl_value) LIKE E '% 92.5%' И случай, когда опасен, тогда «True» else «False» end AND cast (schedule_b как символ меняется (255)) LIKE E '%%'; – Rubyist

+0

ОШИБКА: аргумент И должен иметь тип boolean, а не текст типа – Rubyist