【发布时间】:2016-08-16 19:44:58
【问题描述】:
我正在尝试从为特定用户检索的完整记录集中检索属于特定年份和月份的记录。首先,有问题的字段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 语法错误。 遇到“年。不正确的条件表达式,应为 [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>
这将消除错误。但是,我在 detail 查询中得到了所有 4 行记录,而不是预期的 3 行。我不希望 2015-06-01 20:25:05 记录被选中,但确实如此。我为此挠头。任何帮助表示赞赏。提前谢谢你。
【问题讨论】:
-
您确定通过您使用的连接/驱动程序类型支持月/年函数吗? MySQL 似乎支持月/年,所以我认为引擎在解析查询时没有问题。dev.mysql.com/doc/refman/5.5/en/…
-
但是,我得到了所有 4 行 因为 SQL 查询没有按照您的想法执行...您正在比较两个文字值,例如 @987654327 @。查询中的每一行都将始终为真(或假)。
-
如果您在原始数据库查询中输入日期范围,您的页面会发生什么情况?
-
@DanBracuk 我需要检查用户是否有任何东西。所以我没有在数据库查询中放置日期范围。仅当用户返回某些内容时,我才执行 QofQ。我相信日期范围将适用于原始数据库查询。问题在于 QofQ。如果有记录返回用户,我想防止再次访问数据库。
-
Q of Q 并不总是比多次 db 命中更好的选择。如果您正在处理大量数据,您可能会遇到内存问题。在您的情况下,情况可能会,也可能不会。另一个选择是使用
select count(*)查询进行检查。这都是一门不精确的科学。
标签: mysql date coldfusion cfquery