如何将varchar转换为boolean

问题描述 投票:4回答:4

我有一个变量'x',它是staging表中的varchar,但它在目标表中设置为boolean,其中包含'true'和'false'值。如何在postgresql中将varchar转换为boolean?

postgresql postgresql-9.3 postgresql-9.2 postgresql-9.4
4个回答
9
投票

如果varchar列包含one of the strings(不区分大小写):

  • ttrueyyeson1
  • ffalsennooff0

你可以简单地将它转换为布尔值,例如:

select 'true'::boolean, 'false'::boolean;

 bool | bool 
------+------
 t    | f
(1 row) 

SQLFiddle


4
投票

对于Redshift,我有以下最好的运气:

SELECT DECODE(column_name, 
             'false', '0', 
             'true', '1'
             )::integer::boolean from table_name;

这只是简单地将varchar字符串映射到'0''1',然后Redshift可以先将其转换为整数,最后再转换为布尔值。


这种方法的一大优点是它可以扩展为包含您希望映射的任何其他字符串。即:

    SELECT DECODE(column_name, 
             'false', '0', 
             'no', '0', 
             'true', '1',
             'yes', '1'
             )::integer::boolean from table_name;

您可以阅读有关DECODE方法here的更多信息。


1
投票

对于旧的PostgreSQL版本和在Redshift中,无法运行,但以下操作:

SELECT boolin(textout('true'::varchar)), boolin(textout('false'::varchar));

请参阅SQLFiddle也看到关于PostgreSQL list的讨论。


0
投票

如果你可以假设除了true之外的任何东西都是false,那么你可以使用:

select
  column_name = 'true' column_name_as_bool
from
  table_name;
© www.soinside.com 2019 - 2024. All rights reserved.