使用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月份。可能很简单的解决方案 - 但我很想念它。
请求任何帮助。
答案 0 :(得分:2)
以合理的格式使用真实日期。
<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