2017-09-19 84 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