我正在为我的应用程序开发发票系统。我想每两周向用户开具发票。每周都有一个cronjob,检查用户是否收到发票。但是它给了我一些错误,因为这是一个新的一年,即使他们在一周前拿到发票,系统也会给某人发票。
这是我的疑问:
SELECT *
FROM user
WHERE DAY(registered) = DAY(DATE_SUB(CURDATE(), INTERVAL 2 WEEK))
OR DAY(registered) = DAY(NOW()) AND registered != CURRENT_DATE()
谢谢!
答案 0 :(得分:1)
您可以尝试此操作 - (代码经过测试)Demo
SELECT * FROM user WHERE registered > CURRENT_DATE() AND
MOD((FLOOR( DATEDIFF( now( ) , `registered` ))),14) = 0
答案 1 :(得分: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()
之间的唯一区别是前者包含时间戳。我还要说,在同一个查询中混合使用三种不同方式获取相同日期是不好的做法,即使它们是等效的。