Mysql 在sql中创建动态时间范围

Mysql 在sql中创建动态时间范围,mysql,sql,Mysql,Sql,有没有一种方法可以创建一种动态的方式来进行sql查询,该查询在每个月的第一天和最后一天之间查询数据?我有一个名为created的字段,我想获取创建的数据,该数据位于每月的第一天和最后一天之间。类似的操作可以完成: WHERE created BETWEEN DATE_FORMAT(Now(), '%Y-%M-01 00:00:00') AND DATE_FORMAT(DATE_ADD(DATE_ADD(Now(),INTERVAL 1 MONTH), INTERVAL -12 HOUR), '%

有没有一种方法可以创建一种动态的方式来进行sql查询,该查询在每个月的第一天和最后一天之间查询数据?我有一个名为created的字段,我想获取创建的数据,该数据位于每月的第一天和最后一天之间。

类似的操作可以完成:

WHERE created BETWEEN DATE_FORMAT(Now(), '%Y-%M-01 00:00:00') AND DATE_FORMAT(DATE_ADD(DATE_ADD(Now(),INTERVAL 1 MONTH), INTERVAL -12 HOUR), '%Y-%M-%d 23:59:59')
这并不漂亮,但它完成了任务

有没有一种方法可以创建一种动态的方式来进行sql查询,该查询在每个月的第一天和最后一天之间查询数据

一个简单的方法只使用日期函数:

where created_at >= curdate() + interval (1 - day(curdate()) day and
      created_at < (curdate() + interval (1 - day(curdate()) day) + interval 1 month
其中创建时间>=curdate()+间隔(1天(curdate())天和
创建时间<(curdate()+间隔(1天(curdate())天)+间隔1个月

除了只使用日期算法外,这不会出现错过每月最后一秒的错误。

递归CTE会有所帮助。@RakidNaomi…这不是最佳解决方案,因为它可能错过每月最后一秒。