首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL - DATE_SUB和INTERVAL

MYSQL - DATE_SUB和INTERVAL
EN

Stack Overflow用户
提问于 2019-04-03 07:42:28
回答 2查看 252关注 0票数 0

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

代码语言:javascript
复制
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日(重复)

我怎样才能避免重复

EN

回答 2

Stack Overflow用户

发布于 2019-04-03 08:17:17

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

代码语言:javascript
复制
SELECT *
FROM registrations
WHERE YEAR(orderdate) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
  AND MONTH(orderdate) = MONTH(CURDATE() - INTERVAL 1 MONTH) 
  AND DAY(orderdate) = DAY(CURDATE())
票数 0
EN

Stack Overflow用户

发布于 2019-04-03 10:27:44

在这种情况下,丑陋的方式是可以的:

代码语言:javascript
复制
WHERE orderdate = date( concat( year(curdate())
                              , '-'
                              , month(curdate())-1
                              , '-'
                              , day(curdate())
                              )
                      )

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55485015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档