我们使用 MySQL 作为数据库来存储带有时间戳的消息。是否可以创建一个返回最近 n 个工作日的消息的查询?
即如果 n 是 4 并且今天是星期二,我想要本周星期一、上周星期五、上周星期四和上周星期三的消息。
最佳答案
如果你想直接用mysql来做这件事会有点复杂。正如 Vatev 建议的那样,您应该提前计算日期星日期,但如果您确实想这样做,您可能需要以下函数:
首先你需要计算一下你应该回去多少周,这很容易......对你来说one week = 5 days
,这意味着
weeks = FLOOR(days / 5)
我们已经处理了几周的事情,所以我们现在必须与其余人员一起工作:
rest = days MOD 5
现在我们有两种情况,有周末或没有周末,没有周末的情况很好。我们必须添加 2 天才能跳过它。如果 (WEEKDAY(now) - rest) < 0
则发生周末
rest = IF( (WEEKDAY(now) - rest) < 0, rest + 2, rest)
现在我们可以将其构建为一个标准值(假设您已经预先计算了 {days}
和 {rest}
):
WHERE date >= ADD_DATE(
ADD_DATE (
{now},
INTERVAL -IF( (WEEKDAY({now}) - {rest}) < 0, {rest} + 2, {rest}) DAYS,
),
INTERVAL -FLOOR({days} / 5) WEEKS
)
关于mysql - sql where 子句中的最后 n 个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11692490/