ColdFusion CFQuery只寻找月份

时间:2015-12-31 16:16:45

标签: coldfusion coldfusion-9

使用Access数据库的ColdFusion 9存储日期,例如2015年1月12日,2015年2月22日,2015年1月21日等...

我期待只获得月份结果,例如仅限1月,仅限2月等...

如果我需要使用它,我可以轻松拉动年份:

      <cfquery name="f" datasource="ds">
      select * from master
      where eventdate like '%#yr#%'
      </cfquery>

哪一年就像2015年 - 我可以轻松获得一年。

但是当我切换到:

       where eventdate like '%1/%'

我收到语法FROM错误 - 我不能只获得1月份。可能很简单的解决方案 - 但我很想念它。

请求任何帮助。

3 个答案:

答案 0 :(得分:2)

以合理的格式使用真实日期。

yyyy-mm-dd几乎是唯一合理的日期格式,而mm / dd / yyyy几乎是那里最疯狂的日期表示。除了最终用户输出之外,不要将该表示用于任何目的。

<cfset date = Now()> <!--- or some other actual date -->
<cfset dtfrom = DateFormat(date, "yyyy-mm-01")>
<cfset dtuntil = DateFormat(DateAdd("m", 1, dtfrom), "yyyy-mm-01")>

<cfquery name="f" datasource="ds">
  select * from master
  where eventdate >= '#dtfrom#' and eventdate < '#dtuntil#'
</cfquery>

使用此表单>= ... and < ...的优点是如果您在eventdate上有索引,则可以使用它。表达相同条件的几乎所有其他变体(例如Month(eventDate) = ...)都不能使用索引。

答案 1 :(得分:1)

您可以使用括号来转义访问中的特殊字符:

WHERE evendate LIKE '%1[/]%'

此外,如果您的字段是实际日期(听起来不像),您可以使用month()将其删除,如下所示:

WHERE MONTH(eventDate) = 1

您也可以使用ASDATE将字符字段转换/转换为数据,如下所示:

WHERE MONTH(asDate(eventdate)) = 1

我古老的访问体验有限。祝好运。 :)

答案 2 :(得分:0)

您可以使用Access中提供的Format方法。

试试这个:Format([eventdate],"yyyy/mm/dd")或者如果您只想要这个月并且不关心这一年,那么您的查询可能如下所示:

select * from master
where Format([eventdate],"mm") = 1