我正在尝试从特定用户检索的完整记录集中检索特定年份和月份的记录 . 首先,有问题的字段itemdate是MySql类型的Datetime(例如2016-08-15 20:00:25) . 用户有4行记录:
2016-08-15 20:00:25
2015-06-01 20:25:05
2016-08-15 20:26:00
2016-08-15 23:30:35
通过以下方式检索特定用户的这些记录:
<cfquery datasource="userdatbase"name="reportlist">
select itemid, itemdate, itemvalue
from itemlib
where userid = '#currentuserid#'
</cfquery>
当前年份和月份由以下因素确定:
<cfset thisyear = #Year(Now())#>
<cfset thismonth = #Month(Now())#>
现在过滤原始查询,只获取当前年份和月份的查询:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where year(itemdate) = #thisyear#
and month(itemdate) = #thismonth#
</cfquery>
我收到以下错误:
执行数据库查询时出错 .
Query Of Queries syntax error. 遇到“年 . 不正确的条件表达式,[like | null | between | in | comparison]条件中的预期之一,
我试图这样做:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where #year(reportlist.itemdate)# = #thisyear#
and #month(reportlist.itemdate)# = #thismonth#
</cfquery>
这将摆脱错误 . 但是,我在详细查询中获得了所有4行记录而不是预期的3.我不希望选择 2015-06-01 20:25:05 记录,但确实如此 . 我在摸不着头脑 . 任何帮助表示赞赏 . 先感谢您 .
1 回答
coldfusion查询查询(QofQ)没有dbms的全部功能 . QofQ语法不支持
year()
.您的第二个查询在语法上是正确的,因为它传递的是
reportlist.itemdate
的值,它将是查询reportlist
的第一行中的itemdate
的值(假设您没有循环reportlist
) . ColdFusion将此解释为比较两个文字值而不是比较查询中的行值 .或者,您可以将变量(
fromDate
)设置为所需月份的第一个日期,然后过滤查询,其中项目日期为>=
fromDate和<
fromDate加1个月 . 见下文:这通过使用ColdFusion QoQ中支持的比较器来实现相同的目的 .
这里有一些有用的文档:http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html