Mysql日期操作和整除

tyu7yeag  于 2023-01-20  发布在  Mysql
关注(0)|答案(4)|浏览(179)

我有一个运行一些php和一些mysql的cron,每天午夜过后。我想把所有注册用户(到我的网站),并向他们发送一个提醒和时事通讯的副本。但是,我想这样做,从他们注册每30天。
我曾这样想过:

SELECT * FROM users
WHERE DATE(DT_stamp) = DATE(NOW() - INTERVAL 30 DAY

但这只会在他们注册后的30天内起作用,而不是60天和90天。
实际上,我希望:
注册后的天数可被30整除
这样,每30天,用户将在sql中被选中。
有人能帮我制定这个WHERE子句吗,我正在纠结mysql where day(date 1-date 2)可整除30

nue99wik

nue99wik1#

DATEDIFF函数以天为单位返回两个日期之间的差值,忽略时间:

SELECT * FROM users
WHERE DATEDIFF(DT_stamp, NOW()) % 30 = 0
vyswwuz2

vyswwuz22#

或者反过来...

SELECT * FROM users WHERE MOD(DATEDIFF(NOW(),registration_date),30) = 0;
zvokhttg

zvokhttg3#

使用SQL模函数MOD()

SELECT * FROM users
WHERE MOD( DATE(DT_stamp) - DATE(NOW()), 30) = 0

在mysql中,你也可以使用%操作符,它做同样的事情:

SELECT * FROM users
WHERE (DATE(DT_stamp) - DATE(NOW()) % 30 = 0
col17t5w

col17t5w4#

只是一个补充(并不是说九年过去了:)
如果您想跳过今天的日期,则应添加

AND DATEDIFF(NOW(), DT_stamp) != 0;

使它

SELECT * FROM users WHERE MOD(DATEDIFF(NOW(), DT_stamp), 30) = 0 AND DATEDIFF(NOW(), DT_stamp) != 0;

相关问题