第二十四回:岁月长河

—— SQL Dates (日期处理)
👈 上一回:生生不息 🏠 回到大竹峰 下一回:镜花水月 👉

修仙无岁月,寒尽不知年。但数据库里必须记清楚时间。若是想查找“今天入门”的弟子,或者计算“修炼了多少年”,该如何是好?

这时间格式千奇百怪,有年月日,有时分秒,着实让人头大。

⏳ 光阴之术:Dates

📜 常见时间法器

MySQL 中常用的日期类型:

🧘‍♂️ 试炼一:今夕是何年

不同门派获取“当前时间”的口诀不同:

-- 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() 函数提取出日期部分,忽略具体时间,否则必须分秒不差才能匹配上。

🧘‍♂️ 试炼三:闭关修炼 (Date Arithmetic)

修仙者闭关,动辄数年。如何计算出关日期或闭关时长?

-- 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';
⚠️ 提醒: 不同数据库(MySQL, SQL Server, Oracle)处理日期的函数差异很大,就像不同门派的历法不同,使用前需查阅各自的经书。