我有一个变量'x',它是staging表中的varchar,但它在目标表中设置为boolean,其中包含'true'和'false'值。如何在postgresql中将varchar转换为boolean?
如果varchar列包含one of the strings(不区分大小写):
t
,true
,y
,yes
,on
,1
f
,false
,n
,no
,off
,0
你可以简单地将它转换为布尔值,例如:
select 'true'::boolean, 'false'::boolean;
bool | bool
------+------
t | f
(1 row)
对于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的更多信息。
对于旧的PostgreSQL版本和在Redshift中,无法运行,但以下操作:
SELECT boolin(textout('true'::varchar)), boolin(textout('false'::varchar));
请参阅SQLFiddle也看到关于PostgreSQL list的讨论。
如果你可以假设除了true
之外的任何东西都是false
,那么你可以使用:
select
column_name = 'true' column_name_as_bool
from
table_name;