如何比較布爾列與布爾文字?查詢的Coldfusion查詢中的布爾文字的邏輯比較?
ColdFusion Query of Queries user guide聲稱支持比較布爾文字。
測試條件
此條件測試布爾表達式是否爲真,假或未知。 語法
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)
我發現一種解決方法難看(未示出),但如果有一個更清潔的方式,我想知道。
不確定這是否有幫助,但是如果您轉儲您的'rs'查詢a ='1',那麼您可以執行'where a = 1',但這不能回答您的實際問題(並且不會很有道理,老實說)。我也是10而不是9.0.1。 FWIW railo4將值存儲爲「true」,並且查詢與「a = true」一起工作,但也會對「a爲真」進行炸彈處理。 –
通常'IS'只用於測試'null'值。正如馬特所說,一個簡單的平等測試應該可以工作,即「where a = true」或「where a = 1」。當然,你也可以使用cfqueryparam'其中 ' –
Leigh
@MattBusche - 你應該將其作爲答案發布。顯然,位值在內部被視爲'1/0',所以答案就是你所說的,即使用'where a = 1'(或者如果你喜歡使用'true',使用cfqueryparam)。 – Leigh