查询的coldfusion查询中的布尔文字的逻辑比较?

时间:2013-08-26 02:36:50

标签: coldfusion qoq

如何将布尔列与布尔文字进行比较?

ColdFusion Query of Queries user guide声称支持布尔文字的比较。

  

测试条件

     

此条件测试布尔表达式是True,False还是Unknown。   语法

     

cond_test :: = expression [IS [NOT] {TRUE | FALSE | UNKNOWN}]

但是,在ColdFusion 9.0.1中这段代码

<cfscript>
  rs = QueryNew('a', 'Bit');
  QueryAddRow(rs);
  rs.a[1] = true;
</cfscript>
<cfquery name="rs2" dbtype="query">
  select * from rs where a IS TRUE;
</cfquery>

产生以下错误

java.sql.SQLException: <br><b>Query Of Queries syntax error.</b><br>
Encountered "a IS TRUE.
Incorrect conditional expression, 
Expected one of [like|null|between|in|comparison] condition, 

    at coldfusion.sql.imq.jdbcStatement.parseSQL(jdbcStatement.java:566)
    at coldfusion.sql.imq.jdbcStatement.fetchResult(jdbcStatement.java:536)
    at coldfusion.sql.imq.jdbcStatement.execute(jdbcStatement.java:131)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1374)
    at coldfusion.sql.SqlImpl.execute(SqlImpl.java:345)
    at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:915)
    at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:590)
    at cfqoq2ecfm1569474275.runPage(/Users/jared/git/pf/tafkan/test/temp/qoq.cfm:6)

我发现了一个丑陋的解决方法(未显示),但如果有更清洁的方式,我想知道。

1 个答案:

答案 0 :(得分:4)

转储rs时,它会显示a = 1,因此您需要使用WHERE a = 1WHERE a = <cfqueryparam value="true" cfsqltype="cf_sql_bit"/>

在Railo中,该值存储为true而不是1/0值,但使用cfqueryparam可以解决您的问题。