2

我正在为我的应用程序开发发票系统。我想每 2 周向用户开具发票。每周都有一个 cronjob 检查用户是否收到发票。但它给了我一些错误,因为这是新的一年,即使有人在一周前收到发票,系统也会给他们一张发票。

这是我的查询:

SELECT * 
FROM   user 
WHERE  DAY(registered) = DAY(DATE_SUB(CURDATE(), INTERVAL 2 WEEK))
 OR    DAY(registered) = DAY(NOW()) AND registered != CURRENT_DATE()

谢谢!

4

2 回答 2

1

你可以试试这个——(代码经过测试)Demo

SELECT * FROM user WHERE registered > CURRENT_DATE() AND 
MOD((FLOOR( DATEDIFF( now( ) , `registered` ))),14) = 0                          
于 2013-01-06T14:07:10.940 回答
0

MySQL 中的day函数返回月份中的日期。当时间段跨越月边界时,您的查询显然会遇到问题。

我认为你想要这种形式的逻辑:

SELECT * 
FROM   user 
WHERE  registered >= DATE_SUB(CURDATE(), INTERVAL 2 WEEK)) and
       registered < curdate()

(或者<=,如果您希望为当前日期开具发票。)

我不知道这是在做什么:

 OR    DAY(registered) = DAY(NOW()) AND registered != CURRENT_DATE()

如果注册和 now() 的月份日期相同,则注册应该是当前日期。now()和之间的唯一区别curdate()是前者包括时间戳。我还要说,在同一个查询中混合三种不同的获取相同日期的方法是不好的做法,即使它们是等价的。

于 2013-01-06T15:14:49.163 回答