SQL查询,以检查从今天起2周后的日期

时间:2017-03-17 09:35:31

标签: php mysql

我们有一个预订表格,用户可以预订多个旅游和几个旅游日期。订单在预订后创建并设置为“待处理”状态。我们希望在旅行日期前两周处理订单。

我们写了一个cron工作函数,其目的是让所有处于“待定”状态的订单,并且巡回日期恰好有2周时间。

这是查询

$orders = $wpdb->get_results("SELECT o.*, b.departure_point, b.tour_date, b.tour_id FROM ".CT_TOUR_BOOKINGS_TABLE." b JOIN ".CT_ORDER_TABLE." o ON o.id = b.order_id WHERE o.status = 'pending' AND NOW( ) + INTERVAL 2 WEEK = b.tour_date");

由于我们进行了一些试用预订,因此上述行不起作用。声明

有什么问题吗?
"NOW( ) + INTERVAL 2 WEEK = b.tour_date"

感谢您的帮助。

6 个答案:

答案 0 :(得分:0)

立即尝试()+ 14?我在使用sysdate + 14的oracle上尝试了类似的东西并且它有效。

答案 1 :(得分:0)

你应该用这个来获得两周的间隔

DATE_SUB(curdate(), INTERVAL 2 WEEK)

您可以根据需要更改日期格式

答案 2 :(得分:0)

" NOW()+ INTERVAL 2 WEEK = b.tour_date"

应该是

" DATE_ADD(NOW(),INTERVAL 2 WEEK)= b.tour_date"

代替

答案 3 :(得分:0)

如果tour_datedatetime字段,则它不会与NOW( ) + INTERVAL 2 WEEK匹配,因为它也会尝试比较小时,分钟和秒。您需要比较的是date部分,请尝试以下操作:

AND DATE(b.tour_date) =  DATE(NOW() + INTERVAL 2 WEEK)

Here有关MySQL DATE功能的文档。

答案 4 :(得分:0)

您可以尝试使用DATEDIFF

"SELECT o.*,
        b.departure_point,
        b.tour_date,
        b.tour_id 
   FROM ".CT_TOUR_BOOKINGS_TABLE." b 
   JOIN ".CT_ORDER_TABLE." o 
     ON o.id = b.order_id 
  WHERE o.status = 'pending' 
    AND DATEDIFF(b.tour_date, today) = 14"

答案 5 :(得分:0)

试试这个。

$orders = $wpdb->get_results("SELECT o.*, b.departure_point, b.tour_date, b.tour_id FROM ".CT_TOUR_BOOKINGS_TABLE." b JOIN ".CT_ORDER_TABLE." o ON o.id = b.order_id WHERE o.status = 'pending' AND ((GETDATE()+14) = b.tour_date");

'现在'不是公认的内置函数名称。相反,使用GetDate()。

供参考 https://www.sqlservercentral.com/Forums/Topic183904-8-1.aspx