如何在MariaDB中按指定时间段获取注册用户数据
正确实现方案(MariaDB)
你的核心问题有两个:一是created_at为Unix时间戳(INT类型),直接和CURDATE()的日期数值比较逻辑错误;二是MariaDB中不存在DATEADD函数,正确的日期偏移函数是DATE_ADD。以下是针对不同需求的正确SQL写法:
1. 获取今日注册用户
指当天0点至当前时间的注册用户,两种实现方式:
-- 方式1:将日期转为时间戳比较(性能更优,可利用created_at索引) SELECT * FROM `users` WHERE `created_at` >= UNIX_TIMESTAMP(CURDATE()) AND `created_at` < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);
-- 方式2:将时间戳转为日期后比较 SELECT * FROM `users` WHERE DATE(FROM_UNIXTIME(`created_at`)) = CURDATE();
2. 获取最近7天注册用户
指过去7天内(含今日)的注册用户:
SELECT * FROM `users` WHERE `created_at` >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 7 DAY) AND `created_at` < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);
如果需要获取自然周(按周一为周起始)的注册用户:
SELECT * FROM `users` WHERE YEARWEEK(DATE(FROM_UNIXTIME(`created_at`)), 1) = YEARWEEK(CURDATE(), 1);
注:第二个参数1指定周起始为周一,改为0则以周日为起始。
3. 获取最近30天注册用户
指过去30天内(含今日)的注册用户:
SELECT * FROM `users` WHERE `created_at` >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 30 DAY) AND `created_at` < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY);
如果需要获取自然月的注册用户:
SELECT * FROM `users` WHERE DATE_FORMAT(FROM_UNIXTIME(`created_at`), '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m');
关于日期偏移的正确用法
MariaDB中日期偏移使用DATE_ADD函数,语法为DATE_ADD(日期, INTERVAL 数值 单位),示例:
-- 获取7天后的日期 SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

