我正在尝试从特定用户检索的完整记录集中检索特定年份和月份的记录。首先,有问题的字段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>
我收到以下错误:
执行数据库查询时出错。
查询查询语法错误。 遇到了#34;年。不正确的条件表达式,[like | null | between | in | comparison] condition,
中的一个我试图这样做:
<cfquery dbtype="query" name="detail">
select itemid, itemdate, itemvalue
from reportlist
where #year(reportlist.itemdate)# = #thisyear#
and #month(reportlist.itemdate)# = #thismonth#
</cfquery>
将摆脱错误。但是,我在 detail 查询中获得了所有4行记录而不是预期的3.我不希望 2015-06-01 20:25:05 记录到被选中,但确实如此。我在摸不着头脑。任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:5)
coldfusion查询查询(QofQ)没有dbms的全部功能。 QofQ语法不支持year()
。
您的第二个查询在语法上是正确的,因为它传入了reportlist.itemdate
的值,该值将是查询{em>第一行中itemdate
的值{ {1}}(假设您没有循环reportlist
)。 ColdFusion将此解释为比较两个文字值而不是比较查询中的行值。
或者,您可以将变量(reportlist
)设置为所需月份的第一个日期,然后过滤查询,其中项目日期为fromDate
fromDate和>=
fromDate plus 1个月。见下文:
<
通过使用ColdFusion QoQ支持的比较器,可以实现同样的目的。
此处提供了一些有用的文档:http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html