我需要将一个表中的值作为varchar读取,并将其作为boolean写入另一个表中。因此,除“False”之外的任何标签(文本)都被视为“True”。但我也希望转换(cast)工作-::bool。
我有个例子:
case when COALESCE(NULLIF('#(OG)', '')::bool, false) = FALSE then FALSE else TRUE end
但这是错误的,因为在我的表中我没有完美的数据,比如:f,false,n,no,off,0和t,true,y,yes,on,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>
最佳答案
你可以使用正则表达式,比如
NOT COALESCE(textcol, '') ~* E'^((f(a(l(se?)?)?)?)|(off?)|(no?)|0?)$'
它应该为空返回
FALSE
,为空字符串返回FALSE
,为所有其他字符串返回TRUE
。