0

我正在运行以下 Query of Query 并收到错误消息:

时间戳:包含所有日期和时间相关值的列的名称。

MyDatabase:数据库的名称

事件:另一个名为“事件”的列的名称,包含各种值,例如 FIRST、SECOND、THIRD 等。为了方便和清晰,我在这里提到了 FIRST。

<cfquery datasource = "XX.XX.X.XX" name="master">
SELECT count(Timestamp) as COUNT,date_format(Timestamp,'%m-%d-%Y') 
FROM MyDatabase
WHERE EVENTS = "FIRST" GROUP BY Timestamp ;

 </cfquery> 


<cfquery dbtype="query" name="detail">

SELECT  *
FROM master 
WHERE Timestamp > <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> AND Timestamp <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">;


</cfquery> 

至于 startdate 和 enddate 参数,我设置如下:

<cfparam name="form.startdate" default="#dateformat(now()-5, 'mm/dd/yyyy')#">
<cfparam name="form.enddate" default="#dateformat(now()-1, 'mm/dd/yyyy')#">
<cfparam name="form.selectdate" default="#dateformat(now(), 'mm/dd/yyyy')#">

我收到以下错误:

Error Executing Database Query.

Query Of Queries syntax error.
Encountered "Timestamp. Incorrect conditional expression, Expected one of [like|null|between|in|comparison] condition,

The error occurred in line 40

38 : SELECT  *
39 : FROM master 
40 : WHERE Timestamp > <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> AND Timestamp <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">;
41 :  
42 : 

谁能告诉我出了什么问题?


更新:

修复#标志后,我现在收到以下错误:

Error Executing Database Query.

Query Of Queries syntax error.
Encountered "Timestamp. Incorrect conditional expression, Expected one of [like|null|between|in|comparison] condition, 

The error occurred in line 40

38 : SELECT  *
39 : FROM master 
40 : WHERE Timestamp > <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> AND Timestamp <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">;
41 :  
42 : 
4

3 回答 3

4

value="#dateAdd('d', 1,form.enddate#)"

您的关闭#标志放错了位置。它应该右括号之后:

   value="#dateAdd('d', 1, form.enddate)#"

更新:

“时间戳”和“计数”是列名或别名的错误选择,因为它们是许多数据库中的保留字。正如 Adrian 在评论中提到的,两者也是 CF QoQ 中的保留字。. 要在您的 QoQ 中使用“时间戳”,您必须将其包含在[]. 从长远来看,您最好重命名列并完全避免该问题。

 WHERE   [Timestamp] >= <cfqueryparam ....>
 AND     [Timestamp] <  <cfqueryparam ....>


顺便说一句,您的 SQL 比较中有一个错误。结束日期运算符应该是<. 通过使用<=比较包括一个额外的分钟,所以它有一个很小的机会会拾取额外的记录,即dateAdd('d', 1, form.enddate)在午夜。正确的比较是:

  WHERE   Timestamp >= <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> 
  AND     Timestamp <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">;
于 2013-07-16T16:15:23.577 回答
2

您的代码中有语法错误。

#dateAdd('d', 1,form.enddate#)

应该:

#dateAdd('d', 1,form.enddate)#
于 2013-07-16T16:15:01.567 回答
0

您是否尝试过使用 BETWEEN 关键字?

所以:

WHERE Timestamp > <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date"> AND Timestamp <  <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date">;

会成为:

WHERE Timestamp BETWEEN <cfqueryparam value="#form.startdate#" cfsqltype="cf_sql_date" /> AND <cfqueryparam value="#dateAdd('d', 1,form.enddate)#" cfsqltype="cf_sql_date" />;

只是作为一种选择?

于 2013-07-18T10:51:48.420 回答