2017-09-19 340 views
1

我需要從varchar中讀取一個表中的值,並將其作爲布爾值寫入另一個表中。因此除「False」以外的任何標籤(文本)都被視爲「True」。但我也想要轉換(投)工作 - ::布爾。 我有例如:如何將varchar轉換爲布爾值postgresql

case when COALESCE(NULLIF('#(OG)', '')::bool, false) = FALSE then FALSE else TRUE end 

但它給錯誤,因爲在我的表我沒有完美的數據,例如:F,假,正,無,關閉,0和t,真實,Y,是的, 1,而且簡單的文本 - 123

invalid input syntax for type boolean: "123" 

我EXEL文件,工作,我做的我做file.manifest:

<?xml version="1.0" encoding="utf-8"?> 
<Manifest> 
<File startRow="2" table="td_actualpayments"> 
    <add isSql="false" key="OG" cell="G" header="Contractor OG" /> 
    <add isSql="true" key="ContractorIsGroupSociety" dataType="subquery" query="(case when COALESCE(NULLIF('#(OG)', '')::bool, false) = FALSE then FALSE else TRUE end)" /> 
    </File> 
<PostUpdate> 
+0

請張貼你的表格結構,而不是一些抽象的查詢例子,但是那個會給你錯誤的例子。另外,詳細說明「想投工作:布爾」的意思是 –

回答

1

你可以使用正則表達式,如

NOT COALESCE(textcol, '') ~* E'^((f(a(l(se?)?)?)?)|(off?)|(no?)|0?)$' 

應該返回FALSE爲NULL,空字符串和FALSE每個有效字符串表示,應該對所有其他字符串返回TRUE

+0

非常感謝,作品完美。 – tmf