按 dateLastModified 对 cfdirectory 进行分组(日期不是时间)
group cfdirectory by dateLastModified (date not time)
我是运行 ColdFusion 9 和Oracle 数据库。我正在尝试使用 dateLastModified
对目录中的所有文件进行分组:
<cfdirectory action="LIST"
directory="#path_to_files#"
name="res"
sort="datelastmodified desc,name ASC"
filter="#filters#">
例如:
- 文件 1 的日期:2016-10-03 11:49:00 上午
- 文件 2 的日期:2016-10-03 07:49:00 上午
- 文件 3 的日期:2016-08-03 07:49:00 上午
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>
有谁知道根据日期而不是时间对文件进行分组的不同方法吗?
第 1 步 - 使用 cfdirectory 获取查询对象。
第 2 步 - 使用 queryaddcolumn 添加列。
第 3 步 - 循环查询。在新列上使用 querySetCell 和 dateformat
第 4 步 - 使用 cfoutput,按新列分组,执行您需要执行的操作。您的 cfdirectory 标签已经对数据进行了排序。
method to group files based on days not time
要(仅)按日期分组,请将 "date only" 列添加到您的 SELECT 列表中。然后按新列排序:
<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>
I get no records.
FWIW,原因是尽管使用了 CAST ... as Date
,显然 CF 仍然在内部保留了 "time" 部分。所以 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">
所以我想通了。感谢@Dan 和@Leigh 的建议。我将两者作为指南来获得我想要的东西。
- 我用
cfdirectory
得到了一个查询对象。
- 我使用
QueryNew
、QueryAddRow
和 QuerySetCell
创建了一个新查询。
- 在新查询的列中包含格式化日期 (mm/dd/yyyy)。确保在设置列名
QueryNew
. 时将列声明为 varchar
而不是 date
我使用了 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>
我希望它能帮助到那里的任何人。
我是运行 ColdFusion 9 和Oracle 数据库。我正在尝试使用 dateLastModified
对目录中的所有文件进行分组:
<cfdirectory action="LIST"
directory="#path_to_files#"
name="res"
sort="datelastmodified desc,name ASC"
filter="#filters#">
例如:
- 文件 1 的日期:2016-10-03 11:49:00 上午
- 文件 2 的日期:2016-10-03 07:49:00 上午
- 文件 3 的日期:2016-08-03 07:49:00 上午
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>
有谁知道根据日期而不是时间对文件进行分组的不同方法吗?
第 1 步 - 使用 cfdirectory 获取查询对象。
第 2 步 - 使用 queryaddcolumn 添加列。
第 3 步 - 循环查询。在新列上使用 querySetCell 和 dateformat
第 4 步 - 使用 cfoutput,按新列分组,执行您需要执行的操作。您的 cfdirectory 标签已经对数据进行了排序。
method to group files based on days not time
要(仅)按日期分组,请将 "date only" 列添加到您的 SELECT 列表中。然后按新列排序:
<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>
I get no records.
FWIW,原因是尽管使用了 CAST ... as Date
,显然 CF 仍然在内部保留了 "time" 部分。所以 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">
所以我想通了。感谢@Dan 和@Leigh 的建议。我将两者作为指南来获得我想要的东西。
- 我用
cfdirectory
得到了一个查询对象。 - 我使用
QueryNew
、QueryAddRow
和QuerySetCell
创建了一个新查询。 - 在新查询的列中包含格式化日期 (mm/dd/yyyy)。确保在设置列名
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>
varchar
而不是 date
我希望它能帮助到那里的任何人。