2016-06-07 195 views
2

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

+1

是否要插入,选择更新?或者是什么? –

+0

我想更新 – Ramesh

回答

5

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

  • ttrueyyeson1
  • ffalsennooff0

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

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

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

请参阅SQLFiddle

+0

这不是真的,请参阅'select'true':: varchar :: boolean,'false':: varchar :: boolean;' –

+1

它有什么问题? [SQLFiddle](http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/17922) – klin

+0

嗯,有趣。我会发誓我在新的PostgreSQL中也看到了一个错误,但似乎这只是Redshift和旧PostgreSQL版本中的一个问题。 –

1

对于老版本的PostgreSQL和红移铸造不会工作,但下列情况:

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

SQLFiddle也看到在PostgreSQL list的讨论。

0

红移,我有以下的好运:

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

这只是映射为varchar字符串'0''1'其红移可以再投第一个整数,然后终于到布尔值。


这种方法的一个很大的优点是它可以扩展到包含任何你想要映射的附加字符串。即:

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

你可以阅读更多关于解码方法here