PostgreSql + Typecast типа Boolean в тип символа - PullRequest
2 голосов
/ 14 октября 2010

Здесь я не могу преобразовать логическое значение в символ в запросе Postgre SQL.

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 '%%' Подскажите, как сделать typecast?

1 Ответ

6 голосов
/ 14 октября 2010

Как насчет использования оператора 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, используйте просто «И опасный».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...