修仙无岁月,寒尽不知年。但数据库里必须记清楚时间。若是想查找“今天入门”的弟子,或者计算“修炼了多少年”,该如何是好?
这时间格式千奇百怪,有年月日,有时分秒,着实让人头大。
MySQL 中常用的日期类型:
DATE - 格式:YYYY-MM-DD (2023-10-01)DATETIME - 格式:YYYY-MM-DD HH:MI:SS (2023-10-01 12:30:00)TIMESTAMP - 时间戳 (与时区有关)YEAR - 年份 (2023)不同门派获取“当前时间”的口诀不同:
-- MySQL
SELECT NOW(), CURDATE(), CURTIME();
-- SQL Server
SELECT GETDATE();
-- Oracle
SELECT SYSDATE FROM DUAL;
-- PostgreSQL
SELECT NOW() OR CURRENT_TIMESTAMP;
假设 JoinDate 是 DATETIME 类型:
SELECT * FROM Disciples
WHERE DATE(JoinDate) = CURDATE();
这里用 DATE() 函数提取出日期部分,忽略具体时间,否则必须分秒不差才能匹配上。
修仙者闭关,动辄数年。如何计算出关日期或闭关时长?
-- MySQL: 计算 30 天后的出关日期
SELECT DATE_ADD(NOW(), INTERVAL 30 DAY);
-- MySQL: 计算闭关了多少天 (DATEDIFF)
SELECT DATEDIFF('2023-12-31', '2023-01-01');
-- SQL Server: 计算 30 天后
SELECT DATEADD(day, 30, GETDATE());
-- SQL Server: 计算天数差
SELECT DATEDIFF(day, '2023-01-01', '2023-12-31');
Oracle/PostgreSQL: 通常直接加减数字或使用 INTERVAL 关键字。
-- Oracle/PostgreSQL: 明天
SELECT NOW() + INTERVAL '1 day';