SQL 日期函数
学习日期和时间处理函数 · 难度:进阶 · +15XP
SQL 日期函数
日期和时间是数据库中最常见的数据类型之一。无论是记录用户的注册时间、订单的下单时间,还是计算两个日期之间的间隔天数,都离不开日期函数的支持。不同的数据库系统有各自的日期函数,但核心功能大同小异,主要包括获取当前时间、日期格式化、日期计算以及提取日期部分。
获取当前日期时间
几乎所有数据库都提供获取当前时间戳的函数:
-- MySQL / MariaDB
SELECT NOW(); -- 2024-01-15 10:30:00
SELECT CURDATE(); -- 2024-01-15
SELECT CURTIME(); -- 10:30:00
-- SQLite
SELECT DATE('now'); -- 2024-01-15
SELECT DATETIME('now'); -- 2024-01-15 10:30:00
SELECT TIME('now'); -- 10:30:00
-- PostgreSQL
SELECT NOW(); -- 时间戳带时区
SELECT CURRENT_DATE; -- 当前日期
SELECT CURRENT_TIME; -- 当前时间
-- SQL Server
SELECT GETDATE(); -- 当前日期时间
SELECT GETUTCDATE(); -- UTC 时间
日期计算(加减运算)
日期计算是最常用的功能之一,例如计算 7 天前、30 天后等:
-- SQLite 日期计算
SELECT DATE('now', '+7 days'); -- 7天后
SELECT DATE('now', '-1 month'); -- 1月前
SELECT DATE('now', '+1 year'); -- 1年后
SELECT DATE('now', 'start of month'); -- 本月第一天
-- MySQL 日期计算
SELECT DATE_ADD('2024-01-15', INTERVAL 7 DAY);
SELECT DATE_SUB('2024-01-15', INTERVAL 1 MONTH);
SELECT DATEDIFF('2024-01-31', '2024-01-01'); -- 30天
日期格式化
-- SQLite strftime
SELECT strftime('%Y-%m-%d', 'now'); -- 2024-01-15
SELECT strftime('%Y年%m月%d日', 'now'); -- 2024年01月15日
SELECT strftime('%H:%M:%S', 'now'); -- 10:30:00
-- MySQL DATE_FORMAT
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s');
-- PostgreSQL TO_CHAR
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS');
常用日期函数速查表
| 功能 | SQLite | MySQL |
|---|---|---|
| 当前日期时间 | DATETIME('now') | NOW() |
| 提取年份 | strftime('%Y', date) | YEAR(date) |
| 提取月份 | strftime('%m', date) | MONTH(date) |
| 计算日期间隔 | julianday(d2)-julianday(d1) | DATEDIFF(d2, d1) |
实战任务
- 获取当前日期,并计算 30 天后的日期
- 查询 orders 表中过去 7 天内创建的订单
- 将日期格式化为"YYYY年MM月DD日"的格式