我在脚本中使用以下查询,该脚本根据订单日期-1个月自动为客户充值。
SELECT * FROM registrations WHERE orderdate = DATE_SUB(CURDATE(), INTERVAL 1 month)问题是,对于天数比前一个月多的月份,此查询每天都比前一天多运行。
e.g
3月份比2月份多2-3天,因此查询将在28/29运行2-3次。
3月28日将运行2月28日(这是可以的)
3月29日将再次获取2月28日(重复)
3月30日将再次获取2月28日(重复)
3月31日将再次获取2月28日(重复)
我怎样才能避免重复
发布于 2019-04-03 08:17:17
您可以将比较拆分为3个单独的部分,将年和月值与一个月前的值进行比较,但不涉及日的值。这样,3月31日将转换为2月31日,它不能匹配任何内容。
SELECT *
FROM registrations
WHERE YEAR(orderdate) = YEAR(CURDATE() - INTERVAL 1 MONTH)
AND MONTH(orderdate) = MONTH(CURDATE() - INTERVAL 1 MONTH)
AND DAY(orderdate) = DAY(CURDATE())发布于 2019-04-03 10:27:44
在这种情况下,丑陋的方式是可以的:
WHERE orderdate = date( concat( year(curdate())
, '-'
, month(curdate())-1
, '-'
, day(curdate())
)
)因此,无效日期将为空,并且不匹配。
https://stackoverflow.com/questions/55485015
复制相似问题