我正在运行ColdFusion 9和Oracle数据库。我正试图通过dateLastModified
使用:
<cfdirectory action="LIST"
directory="#path_to_files#"
name="res"
sort="datelastmodified desc,name ASC"
filter="#filters#">
例如:
File 1 & 2
应为第1组,File 3
应为第2组
如果我使用查询查询,如何根据天而不是时间来比较日期?这是我到目前为止所做的,但似乎没有用。我没有记录。
<cfquery name="getfiles" dbtype="query">
SELECT name, datelastmodified
FROM res
WHERE CAST( [datelastmodified] as date) = CAST(<cfqueryparam cfsqltype="CF_SQL_DATE" value="#d#"/> as date)
</cfquery>
有没有人知道根据天数而不是时间对文件进行分组的不同方法?
答案 0 :(得分:2)
根据天数而不是时间对文件进行分组的方法
要按日期分组(仅限),请仅添加&#34;日期&#34;列到SELECT列表。然后按新列ORDER BY:
<cfquery name="qSortedFiles" dbtype="query">
SELECT CAST(DateLastModified AS Date) AS DateOnly
, Name
, DateLastModified
FROM getFiles
ORDER BY DateOnly
</cfquery>
<cfoutput query="qSortedFiles" group="DateOnly">
#DateOnly#<br>
<cfoutput>
- #DateLastModified#<br>
</cfoutput>
</cfoutput>
我没有记录。
FWIW,原因是尽管使用CAST ... as Date
,显然CF仍然保留了#34;时间&#34;部分内部。所以WHERE
子句仍在比较苹果和橘子:
<!--- comparing Date and Time to Date (only)
WHERE 2016-08-03 07:49:00 am = 2016-08-03 00:00:00 am
使用此方法,而不是使用等于比较:
WHERE DateLastModified >= {TheStartDateAtMidnight}
AND DateLastModified < {TheNextDayAtMidnight}
这种比较更灵活,因为它适用于日期和时间列 - 以及日期(仅限)。
WHERE CAST(DateLastModified AS Date) >= <cfqueryparam value="#someDate#" cfsqltype="cf_sql_date">
AND CAST(DateLastModified AS Date) < <cfqueryparam value="#dateAdd('d', 1, someDate)#" cfsqltype="cf_sql_date">
答案 1 :(得分:1)
步骤1 - 使用cfdirectory获取查询对象。
第2步 - 使用queryaddcolumn添加列。
第3步 - 循环查询。在新列上使用querySetCell和dateformat
第4步 - 使用cfoutput,按新列分组,执行您需要执行的操作。您的cfdirectory标记已经对数据进行了排序。
答案 2 :(得分:0)
所以我明白了。感谢@Dan和@Leigh提出的建议。我用这两个作为指南来获得我想要的东西。
cfdirectory
来获取查询对象。QueryNew
,QueryAddRow
和QuerySetCell
创建了一个新查询。varchar
时,请确保将列声明为date
而不是QueryNew
。我使用cfloop
和group
选项以及cfoutput
来显示记录。
<cfset path_to_files = "d:\inetpub\wwwroot\mailrideli\webrpt\">
<cfset filters = "*.pdf|*.txt|*.xls">
<cfdirectory action="LIST" directory="#path_to_files#" name="res" sort="datelastmodified desc,name ASC" filter="#filters#">
<cfset q = QueryNew("Name,dateformated,datelastmodified, size","Varchar, Varchar, date, varchar")>
<cfset count = 1>
<cfset newRow = QueryAddRow(q,res.recordCount)>
<cfloop query="res">
<cfset d = DateFormat(res.dateLastModified,"mm/dd/yyyy")>
<cfset temp = QuerySetCell(q, "Name", "#res.name#", count)>
<cfset temp = QuerySetCell(q, "dateformated", "#d#", count)>
<cfset temp = QuerySetCell(q, "datelastmodified", "#res.datelastmodified#", count)>
<cfset temp = QuerySetCell(q, "size", "#res.size#", count)>
<cfset count += 1>
</cfloop>
<cfoutput>
<cfloop query="q" group="dateformated">
#q.dateformated#<br />
<table>
<tr>
<th>File Name</th>
<th>Size (bytes)</th>
<th>Last Modified</th>
</tr>
<cfloop>
<tr>
<td><a href="#q.name#">#q.name#</a></td>
<td>#q.size#</td>
<td>#dateformat(q.dateLastModified, 'mm/dd/yyyy')# #timeformat(q.dateLastModified, 'hh:mm:ssTT')#</td>
</tr>
</cfloop>
</table>
</cfloop>
</cfoutput>
我希望它可以帮助那里的任何人。