MYSQL-DATE_SUB和INTERVAL

时间:2019-04-02 23:42:28

标签: mysql

我在脚本中使用以下查询,该脚本会根据订单日期-1个月自动为客户收费。

SELECT * FROM registrations WHERE orderdate = DATE_SUB(CURDATE(), INTERVAL 1 month)

问题在于,该查询的月份比上个月多,因此该查询 每天比前一天运行更多。

例如

3月比2月多2-3天,因此查询将在2月28/29日运行2-3次。

3月28日将运行2月28日(可以)

3月29日将再次获取2月28日(重复)

3月30日将再次获取2月28日(重复)

3月31日将再次获取2月28日(重复)

如何避免重复

2 个答案:

答案 0 :(得分:0)

您可以将比较分为3个单独的部分,将年和月的值与一个月前的值进行比较,但不影响日值。这样,3月31日将转换为2月31日,无法匹配任何内容。

{% for project in projects_created_by_me %}
  <p>Project Name: {{project.projectName}}</p>
{% empty %}
  <p>You do not have any projects</p>
{% endfor %}

答案 1 :(得分:0)

在这种情况下,丑陋的方法很好:

WHERE orderdate = date( concat( year(curdate())
                              , '-'
                              , month(curdate())-1
                              , '-'
                              , day(curdate())
                              )
                      )

因此无效日期将为null,并且不匹配。