Группа cfdirectory по dateLastModified (дата не время)
Я использую 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>
Кто-нибудь знает другой способ группировки файлов по дням, а не по времени?
3 ответа
Так что я понял это. Спасибо @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>
Я надеюсь, что это поможет кому-нибудь там.
метод группировки файлов по дням, а не по времени
Чтобы сгруппировать по дате (только), добавьте столбец "только по дате" в свой список 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>
Я не получаю никаких записей.
FWIW, причина в том, что, несмотря на использование CAST ... as Date
По-видимому, CF все еще сохраняет "временную" часть внутри. Итак 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 - Используйте cfdirectory для получения объекта запроса.
Шаг 2 - Добавьте столбец, используя queryaddcolumn.
Шаг 3 - цикл по запросу. Используйте querySetCell и dateformat в вашем новом столбце
Шаг 4 - используйте cfoutput, группируйте по новому столбцу, чтобы делать то, что вам нужно. Ваш тег cfdirectory уже имеет отсортированные данные.