我设置了SQL
语句来从当前日历周中获取数据。默认情况下,这会从星期日开始并在星期六结束时抓取数据。我希望改变这一点,以便日历周的开始是星期四,它在星期三结束。以下是我的发言:
SELECT *
FROM transactions
WHERE yearweek(transactionDate) = yearweek(now())
ORDER BY transactionDate DESC
有没有办法以允许这种方式修改年周?
谢谢!
答案 0 :(得分:0)
您可以利用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
替换为工作日。
答案 1 :(得分:-3)
您可以指定开始日期 - 默认为0(星期日)。
将其设置为4(星期四):
YEARWEEK(transactionDate, 4)