CREATE TABLE `sport_data` (
`id` int(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`sport` varchar(255) NOT NULL,
`musclePlan` varchar(255) NOT NULL,
`sport_time` varchar(255) NOT NULL,
`kcal` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
如何从该表中获取上周(从周一到周日)的所有数据?
我试过:
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY
不知道这样说对不对?
提前致谢。
最佳答案
>=
和 <
pattern就是我们平时用的。那部分看起来不错。
我认为问题是关于返回范围开始值和结束值的表达式。
我建议我们针对各种日期值测试这些表达式,而不仅仅是 CURDATE()
.我们可以使用一个值代替 CURDATE()
,并检查结果,并对一系列日期值执行此操作。
方便的是,这些表达式在 SELECT
中的计算结果相同像在 WHERE
中一样列出条款。所以我们可以运行 SELECT
声明,并检查结果。
例如:
SELECT t.dt AS dt
, t.dt - INTERVAL DAYOFWEEK(t.dt)+5 DAY AS _ge
, t.dt - INTERVAL DAYOFWEEK(t.dt)-2 DAY AS _lt
FROM (
SELECT CURDATE() + INTERVAL 0 DAY AS dt
UNION ALL SELECT CURDATE() + INTERVAL -1 DAY
UNION ALL SELECT CURDATE() + INTERVAL -2 DAY
UNION ALL SELECT CURDATE() + INTERVAL -3 DAY
UNION ALL SELECT CURDATE() + INTERVAL -4 DAY
UNION ALL SELECT CURDATE() + INTERVAL -5 DAY
UNION ALL SELECT CURDATE() + INTERVAL -6 DAY
UNION ALL SELECT CURDATE() + INTERVAL -7 DAY
UNION ALL SELECT CURDATE() + INTERVAL -8 DAY
UNION ALL SELECT CURDATE() + INTERVAL -9 DAY
UNION ALL SELECT CURDATE() + INTERVAL -10 DAY
) t
如果表达式根据规范为每个可能的日期值返回我们期望的值,则表达式是正确的。
如果表达式返回的值不符合规范,那么我们需要进行调整。请注意,在星期三日期“有效”的表达式可能在星期日日期“无效”。)
关于MYSQL:从周一开始获取上周的所有结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50026532/