2016-06-07 191 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