简单的问题,但我在 Stack Exchange 上没有找到任何这样的例子:
我需要能够选择当前计费周期中的所有记录,仅此而已。问题是计费周期不是从每月的第一天开始,所以我不能这样做MONTH(date) = MONTH(CURRENT_DATE())
。我可以单独比较日期的各个部分,但处理数月和数年的环绕是一件痛苦的事情。例如,如果计费周期从每月 15 日开始,则自过帐日期起,日期将为2023-11-15
,而不是2023-12-15
。一个月后,这将是与当前日期2023-12-15
不同的月份和年份。
因为仅仅处理这个过滤器,SQL 就变得又长又乱,所以我想改为生成一次最后计费日期的开始时间,然后直接将整个日期与该日期进行比较,但我在将它们放在一起时遇到了一些麻烦。例如WHERE date >= '2023-11-15'
(但动态生成此日期)。减去INTERVAL 1 MONTH
以获取计费周期开始的月份是行不通的,因为只有当它在当月的计费周期日期之前时才会出现这种情况。有没有一种优雅的方法来计算 MySQL/MariaDB 中该月的最近nth
一天,无论该天是在当月还是上个月?
我建议将其粘贴到 UDF 中,以避免弄乱您的 SQL 语句(特别是如果您想要/需要参数化您要查找的月份中的哪一天),但似乎关键位是您说的“这只是如果是在这一天之前……”这直接导致我想到了这一点: