- UID
- 2
- 积分
- 904
- 元宝
- 枚
- 灵石
- 枚
- 灵晶
- 枚
- 注册时间
- 2026-7-9
- 最后登录
- 1970-1-1
|
一、获取当前时间
- SELECT
- NOW(), -- 年月日时分秒 2026-07-17 15:20:10
- CURDATE(), -- 仅日期 2026-07-17
- CURTIME(), -- 仅时间 15:20:10
- SYSDATE(),
- UTC_DATE(),
- UTC_TIME();
复制代码
二、拆分日期 / 时间字段
假设有字段 regtime 存储注册时间(int 时间戳或 datetime)
- SELECT
- uid,
- regtime,
- YEAR(regtime) 年,
- MONTH(regtime) 月,
- DAY(regtime) 日,
- HOUR(regtime) 时,
- MINUTE(regtime) 分,
- SECOND(regtime) 秒,
- DAYOFWEEK(regtime) 星期,
- DATE_FORMAT(regtime,'%Y-%m-%d') 日期,
- DATE_FORMAT(regtime,'%Y-%m-%d %H:%i:%s') 完整时间
- FROM pre_common_member;
复制代码
三、时间戳 ↔ 日期转换(Discuz 常用 int 时间戳)
Discuz 会员表 pre_common_member 里 regdate 是int 时间戳
- -- 时间戳转日期
- FROM_UNIXTIME(aa.regdate,'%Y-%m-%d %H:%i:%s') AS 注册时间
- -- 日期转时间戳
- UNIX_TIMESTAMP('2026-07-17')
复制代码 套进你的 SQL 示例:
- SELECT
- aa.`uid` AS '用户ID',
- aa.`loginname` AS '登录名',
- FROM_UNIXTIME(aa.regdate,'%Y-%m-%d') AS '注册日期',
- bb.`grouptitle` AS '用户组',
- CASE
- WHEN aa.`adminid` NOT IN (1,2,3) THEN '空'
- ELSE cc.`grouptitle`
- END AS '管理权限组'
- FROM pre_common_member aa
- LEFT JOIN pre_common_usergroup bb ON aa.`groupid` = bb.`groupid`
- LEFT JOIN pre_common_usergroup cc ON aa.`adminid` = cc.`groupid`;
复制代码
四、时间加减
- DATE_ADD(regtime, INTERVAL 7 DAY) -- 7天后
- DATE_SUB(regtime, INTERVAL 1 MONTH) -- 1个月前
- DATE_ADD(regtime, INTERVAL 3 HOUR) -- 加3小时
复制代码
五、计算时间差
- DATEDIFF('2026-07-10','2026-07-01') -- 相差天数
- TIMESTAMPDIFF(DAY,regdate,NOW()) -- 注册至今多少天
复制代码
六、判断时间 CASE WHEN 搭配
- CASE
- WHEN TIMESTAMPDIFF(DAY,FROM_UNIXTIME(aa.regdate),NOW()) < 30 THEN '新用户'
- WHEN aa.adminid > 0 THEN '管理员'
- ELSE '老会员'
- END AS 用户标签
复制代码
七、日期格式化占位符
%Y 4 位年 | %m 月份 | %d 日期
%H 24 小时 | %i 分钟 | %s 秒
%w 星期 |
|