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

coldfusion查询中布尔文本的逻辑比较?,coldfusion,qoq,Coldfusion,Qoq,如何将布尔列与布尔文本进行比较 ColdFusion声称支持布尔文本的比较 测试条件 此条件测试布尔表达式是否为真、假或未知。 语法 cond|u test::=表达式[是[不是]{TRUE | FALSE |未知}] 但是,在ColdFusion 9.0.1中,此代码 <cfscript> rs = QueryNew('a', 'Bit'); QueryAddRow(rs); rs.a[1] = true; </cfscript> <cfquery n

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

ColdFusion声称支持布尔文本的比较

测试条件

此条件测试布尔表达式是否为真、假或未知。 语法

cond|u test::=表达式[是[不是]{TRUE | FALSE |未知}]

但是,在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>

rs=QueryNew('a','Bit');
QueryAddRow(rs);
rs.a[1]=正确;
从rs中选择*,其中a为真;
产生以下错误

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)
java.sql.SQLException:
查询语法错误。
遇到“a”是真的。 条件表达式不正确, 应为[like | null | between | in | comparison]条件之一, 位于coldfusion.sql.imq.jdbcStatement.parseSQL(jdbcStatement.java:566) 位于coldfusion.sql.imq.jdbcStatement.fetchResult(jdbcStatement.java:536) 位于coldfusion.sql.imq.jdbcStatement.execute(jdbcStatement.java:131) 位于coldfusion.sql.Executive.executeQuery(Executive.java:1374) 在coldfusion.sql.SqlImpl.execute(SqlImpl.java:345) 位于coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:915) 位于coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:590) 在cfqoqecfm1569474275.runPage(/Users/jared/git/pf/tafkan/test/temp/qoq.cfm:6)

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

当您转储
rs
时,它会显示
a=1
,因此您需要使用
WHERE a=1
WHERE a=


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

当您转储
rs
时,它显示
a=1
,因此您需要使用
其中a=1
其中a=/code>


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

不确定这是否有帮助,但如果您转储
rs
查询a=
1
,则可以执行
其中a=1
,但这并不能回答您的实际问题(老实说,这没有多大意义)。我也在10上,而不是9.0.1。FWIW railo4将值存储为
true
,查询可以使用
a=true
,但也可以使用
a is true
。通常
is
仅用于测试
null
值。如Matt所述,简单的相等性测试应该可以使用
其中a=true
其中a=1
。当然,您也可以使用cfqueryparam
where
@MattBusche-您应该将其作为答案发布。显然,位值在内部被视为
1/0
,因此答案正是您所说的,即使用
where a=1
(或者如果您更喜欢使用文字
true
,请使用cfqueryparam)@Leigh谢谢你的确认。我已经将此作为一个答案发布。我不确定这是否有帮助,但如果你放弃你的
rs
查询a=
1
,那么你可以在
中执行a=1
,但这并不能回答你的实际问题(老实说,这没有多大意义)。我也在10上,而不是9.0.1。FWIW railo4将值存储为
true
,查询可以使用
a=true
,但也可以使用
a is true
。通常
is
仅用于测试
null
值。如Matt所述,简单的相等性测试应该可以使用
其中a=true
其中a=1
。当然,您也可以使用cfqueryparam
where
@MattBusche-您应该将其作为答案发布。显然,位值在内部被视为
1/0
,因此答案正是您所说的,即使用
where a=1
(或者如果您更喜欢使用文字
true
,请使用cfqueryparam)@Leigh谢谢你的确认。我将此作为答案发布。你找到了我提到的相同解决方法:)我接受。你找到了我提到的相同解决方法:)我接受。