You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:筛选对应指定星期几的递增日期数值行

解决MySQL中筛选对应星期几数值的问题

没问题,这个需求可以通过MySQL的取模运算轻松实现,核心是把持续递增的数值映射回1-7的星期几范围。

核心思路

你的数值规则是:1=周一,7=周日,超过一周的数值(比如13、20)按7循环对应星期几。这里唯一需要注意的是7的倍数(如7、14、21),直接用MOD取模会得到0,但我们需要对应7(周日)。

可以用一个通用表达式把任何数值转换为对应的星期几:
MOD(week_num - 1, 7) + 1

这个表达式的逻辑是:

  • 先把数值减1,让周日(7)变成6,这样取模7后得到6,再加1就回到7,完美匹配周日
  • 其他数值(比如13)减1后是12,取模7得5,加1得6,正好对应周六

举几个验证例子:

  • 数值1 → (1-1)=0 → MOD(0,7)=0 → +1=1(周一,正确)
  • 数值7 → (7-1)=6 → MOD(6,7)=6 → +1=7(周日,正确)
  • 数值13 → (13-1)=12 → MOD(12,7)=5 → +1=6(周六,正确)
  • 数值20 → (20-1)=19 → MOD(19,7)=5 → +1=6(周六,正确)

具体查询语句

假设你的表名为your_table,存储星期数值的列名为week_value,要筛选的目标星期几为target_day(比如1=周一,7=周日),查询语句如下:

SELECT *
FROM your_table
WHERE MOD(week_value - 1, 7) + 1 = [target_day];

示例:筛选所有周六的记录

SELECT *
FROM your_table
WHERE MOD(week_value - 1, 7) + 1 = 6;

备选方案(分情况处理)

如果你觉得统一表达式有点绕,也可以分目标星期几处理:

  • 筛选周日(7):
SELECT *
FROM your_table
WHERE MOD(week_value, 7) = 0;
  • 筛选周一(1)到周六(6):
-- 筛选周一
SELECT *
FROM your_table
WHERE MOD(week_value, 7) = 1;

-- 筛选周六
SELECT *
FROM your_table
WHERE MOD(week_value, 7) = 6;

额外提示

如果你的目标星期几是动态参数(比如从应用程序传入),推荐使用统一表达式的写法,这样不用在代码里做条件判断,逻辑更简洁。

内容的提问来源于stack exchange,提问作者Gleeson88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:54:19