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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:12:50