1

我想查询4天前的订单信息。不过,我不能完全让查询使用全天 24 小时:

<cfquery name="rsByDate" datasource="#request.dsn#">
    SELECT tbl_customers.cst_FirstName
            , tbl_customers.cst_LastName
            , tbl_customers.cst_Email
            , tbl_orders.order_ID
            , tbl_orders.order_Date
    FROM  tbl_customers INNER JOIN tbl_orders 
               ON tbl_customers.cst_ID = tbl_orders.order_CustomerID
    WHERE tbl_orders.order_Date >= #CreateODBCDateTime(DateAdd("d",-5,Now()))#
    AND   tbl_orders.order_Date <= #CreateODBCDateTime(DateAdd("d",-4,Now()))#
    AND   order_Status = 3
    ORDER BY tbl_orders.order_Date DESC
</cfquery>

我希望实现的是执行此查询,然后cfmail在客户的订单被标记为状态 3“已发货”四天后要求客户对我们进行审查。

我想我的日期设置不太正确。我哪里错了?

4

1 回答 1

3

这是因为您的筛选日期基于now(),它具有时间组件。所以now()-4对我来说是 2012 年 5 月 11 日,但在下午 12:10。您只想将日期部分用于过滤器。

无论如何,您都不应该在 SQL 字符串中硬编码您的动态值,因此首先使用<cfqueryparam>参数化您的动态值,然后使用 aCF_SQL_DATE作为类型,它应该只传递日期,而不是日期/时间。我目前无法为您测试,但请尝试...如果它仍然超过日期/时间的时间部分,则使用createDate().

于 2012-11-09T12:13:37.343 回答