1

我有一个来自查询的查询,称为 AllPosts 的查询。

AllPosts 有两个结果:

Row 1| ID: 2   PublishedDate: 2012-05-30 16:47:00.0
Row 2| ID: 3   PublishedDate: 2012-05-31 15:50:00.0

当我对名为 FilterPosts 的 AllPosts 进行查询时,使用

WHERE PublishedDate BETWEEN '2012-05-01 00:00:00' AND '2012-05-31 23:59:00'

(请注意,实际查询是为这些值执行 cfqueryparam cf_sql_date)

我希望 FilterPosts 与 AllPosts 具有相同的行,但我只得到 ID 2。如果我将 ID 2 的发布日期更改为2012-05-30 23:59:50.0,FilterPosts 会返回正确的结果。

我也试过

WHERE PublishedDate >= '2012-05-01 00:00:00'   
AND   PublishedDate <= '2012-05-31 23:59:00'   

5 月 31 日有一些特别奇怪的地方。

我在这里拔头发!谢谢!

我尝试从头开始构建原始查询,奇怪的是,结果相同!

<cfset test = queryNew("Name,PublishedDate", "VarChar, Time" )>
<cfset queryAddRow(test)>    
<cfset querySetCell(test,"PublishedDate","2012-05-30 16:47:00.0")>     
<cfset querySetCell(test,"Name","First Entry")>    
<cfset queryAddRow(test)>    
<cfset querySetCell(test,"PublishedDate","2012-05-31 15:47:00.0")>    
<cfset querySetCell(test,"Name","Second Entry")>    

<cfset StartDate = CreateDate(2012, 5, 1)>

<cfquery name="filter" dbtype="query">    
    SELECT Name, PublishedDate    
    FROM    test
WHERE    1=1
AND PublishedDate >= <cfqueryparam value="#StartDate#" cfsqltype="cf_sql_date">
AND PublishedDate <= <cfqueryparam value="#DateAdd( 'n', -1, DateAdd('m', 1, StartDate) )#" cfsqltype="cf_sql_date">
 </cfquery>

Filter 的结果只有“FirstEntry”,而不是两者都应该。

4

3 回答 3

3

你没有说你使用的是哪个数据库,但如果是 ODBC 或 MSSQL,我通常会这样做:

WHERE PublishedDate >= '2012-05-01'
AND PublishedDate < '2012-06-01'

基本上,您将一天添加到要包含的结束日期并使用小于运算符。省略时间可以防止内部构造日期的方式出现任何异常。

于 2012-06-01T15:28:21.813 回答
3

奇怪的是,它与 cfqueryparam 有关。我一直在使用 CreateDate() 创建我的开始/结束日期,如下所示:

<cfset StartDate = CreateDate(2012,5, 1)>

我在我的 SQL WHERE 查询中使用它,如下所示:

WHERE PublishedDate >=  <cfqueryparam value="#StartDate#" cfsqltype="cf_sql_date">

它是cf_sql_date。应该是cf_sql_timestamp日期将其限制为 5-31,因此当天晚些时候在 5-31 发布的任何内容都被省略了。时间在减少。

感谢大家的意见。

修复遗留代码摇滚!

于 2012-06-01T15:54:19.867 回答
1

尝试通过timepart从日期时间中删除来进行比较。所以你between应该看起来像

WHERE PublishedDate BETWEEN '2012-05-01' AND '2012-05-31'
于 2012-06-01T15:32:46.767 回答