查询中的Coldfusion MySQL查询

Jac*_*ack 1 mysql coldfusion date cfquery

我正在尝试从特定用户检索的完整记录集中检索特定年份和月份的记录.首先,有问题的字段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
Run Code Online (Sandbox Code Playgroud)

通过以下方式检索特定用户的这些记录:

<cfquery datasource="userdatbase"name="reportlist">
select itemid, itemdate, itemvalue
from itemlib
where userid = '#currentuserid#'
</cfquery>
Run Code Online (Sandbox Code Playgroud)

当前年份和月份由以下因素确定:

<cfset thisyear = #Year(Now())#>
<cfset thismonth = #Month(Now())#>
Run Code Online (Sandbox Code Playgroud)

现在过滤原始查询,只获取当前年份和月份的查询:

    <cfquery dbtype="query" name="detail"> 
        select itemid, itemdate, itemvalue
        from reportlist
        where year(itemdate) = #thisyear#
        and month(itemdate) = #thismonth#
    </cfquery>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

执行数据库查询时出错.

查询查询语法错误. 遇到"年.不正确的条件表达式,期望的[像| | | | | | |比较]条件之一,

我试图这样做:

    <cfquery dbtype="query" name="detail"> 
        select itemid, itemdate, itemvalue
        from reportlist
        where #year(reportlist.itemdate)# = #thisyear#
        and #month(reportlist.itemdate)# = #thismonth#
    </cfquery>
Run Code Online (Sandbox Code Playgroud)

这将摆脱错误.但是,我在详细查询中获得了所有4行记录而不是预期的3.我不希望选择2015-06-01 20:25:05记录,但确实如此.我在摸不着头脑.任何帮助表示赞赏.先感谢您.

bel*_*sja 5

coldfusion查询查询(QofQ)没有dbms的全部功能.year()QofQ语法不支持.

你的第二个查询语法正确的,因为它传递的价值reportlist.itemdate,这将是价值itemdate的在第一行的查询reportlist(假设你是不是遍历reportlist).ColdFusion将此解释为比较两个文字值而不是比较查询中的行值.

或者,您可以将变量(fromDate)设置为所需月份的第一个日期,然后过滤查询,其中项目日期为>=fromDate,<fromDate加1个月.见下文:

<!--- set fromDate to the first date of the month --->
<cfset fromDate = createDate(thisyear, thismonth, 1) />
<cfquery dbtype="query" name="detail"> 
    select itemid, itemdate, itemvalue
    from reportlist
    where itemdate >= <cfqueryparam value="#fromDate#" cfsqltype="cf_sql_date" />
          and itemdate < <cfqueryparam value="#dateAdd('m', 1, fromDate)#" cfsqltype="cf_sql_date" />
</cfquery>
Run Code Online (Sandbox Code Playgroud)

这通过使用ColdFusion QoQ中支持的比较器来实现相同的目的.

这里有一些有用的文档:http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html