我设置了一个SQL
语句来获取当前日历周的数据。默认情况下,这将抓取从星期日开始到星期六结束的数据。我希望改变这一点,以便日历周的开始是星期四,并在星期三结束。以下是我的发言:
SELECT *
FROM transactions
WHERE yearweek(transactionDate) = yearweek(now())
ORDER BY transactionDate DESC
有没有办法修改年周以允许这样做?
谢谢!
您可以
利用WEEKDAY()
返回表示星期几的数字(0 = 星期一,6 = 星期日)和一些简单的数学运算来重写此查询。
从所选日期中减去您希望一周开始的工作日(在本例中为 4 = 星期四),将 7 相加,然后从 7 中取余数。这将为您提供减去范围的天数,以获得范围的开始。
类似的逻辑适用于计算范围的结束日期。
SELECT *
FROM transactions
WHERE DATE(transactionDate)
BETWEEN DATE_SUB(DATE(NOW()), INTERVAL (WEEKDAY(NOW()) - 4 + 7) % 7 DAY)
AND DATE_ADD(DATE(NOW()), INTERVAL 6 - (WEEKDAY(NOW()) - 4 + 7) % 7 DAY)
ORDER BY transactionDate DESC;
对于不同的开始日期,请将工作日替换为查询中的4
。
您可以指定开始日期 - 默认值为 0(星期日)。
只需将其设置为 4(星期四):
YEARWEEK(transactionDate, 4)