2013-08-26 22 views
0

如何比較布爾列與布爾文字?查詢的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) 

我發現一種解決方法難看(未示出),但如果有一個更清潔的方式,我想知道。

+2

不確定這是否有幫助,但是如果您轉儲您的'rs'查詢a ='1',那麼您可以執行'where a = 1',但這不能回答您的實際問題(並且不會很有道理,老實說)。我也是10而不是9.0.1。 FWIW railo4將值存儲爲「true」,並且查詢與「a = true」一起工作,但也會對「a爲真」進行炸彈處理。 –

+2

通常'IS'只用於測試'null'值。正如馬特所說,一個簡單的平等測試應該可以工作,即「where a = true」或「where a = 1」。當然,你也可以使用cfqueryparam'其中' – Leigh

+0

@MattBusche - 你應該將其作爲答案發布。顯然,位值在內部被視爲'1/0',所以答案就是你所說的,即使用'where a = 1'(或者如果你喜歡使用'true',使用cfqueryparam)。 – Leigh

回答

4

當你傾倒rs它顯示a = 1,所以你需要使用WHERE a = 1WHERE a = <cfqueryparam value="true" cfsqltype="cf_sql_bit"/>

在Railo的值存儲爲true而不是1/0值,但使用cfqueryparam將解決您的問題,無論哪種方式。

+0

您已找到我提到的相同解決方法:)我會接受它。 –