2

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 am
  • ファイル 2 の日付: 2016-10-03 07:49:00 am
  • ファイル 3 の日付: 2016-08-03 07:49:00 am

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>

時間ではなく日に基づいてファイルをグループ化する別の方法を知っている人はいますか?

4

3 に答える 3

2

時間ではなく日に基づいてファイルをグループ化する方法

日付 (のみ) でグループ化するには、「日付のみ」列を 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がまだ「時間」部分を内部的に保持しているためです。したがって、WHERE句はまだリンゴとオレンジを比較しています。

  <!--- comparing Date and Time to Date (only)
  WHERE 2016-08-03 07:49:00 am  = 2016-08-03 00:00:00 am

equals 比較を使用する代わりに、次のアプローチを使用します。

    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">
于 2016-10-03T17:27:12.830 に答える