SQL日期函数和时间函数是数据库操作中处理时间数据的核心工具,能够帮助开发者完成时间获取、格式化、计算、类型转换等多种操作,不同数据库的实现语法略有差异,但核心功能逻辑基本一致。

一、常用日期时间获取函数
获取当前时间是时间处理的基础需求,不同数据库的实现方式如下:
- MySQL使用
NOW()获取当前日期和时间,CURDATE()获取当前日期,CURTIME()获取当前时间 - PostgreSQL使用
NOW()或者CURRENT_TIMESTAMP获取当前日期时间,CURRENT_DATE获取当前日期 - SQL Server使用
GETDATE()获取当前日期时间,CAST(GETDATE() AS DATE)获取当前日期
以下是MySQL中获取当前时间的示例代码:
-- 获取当前完整日期时间 SELECT NOW() AS current_datetime; -- 获取当前日期 SELECT CURDATE() AS current_date; -- 获取当前时间 SELECT CURTIME() AS current_time;
二、日期时间格式化函数
将日期时间转换为指定格式的字符串是常见需求,MySQL中使用DATE_FORMAT()函数,PostgreSQL使用TO_CHAR()函数,SQL Server使用CONVERT()或者FORMAT()函数。
MySQL的DATE_FORMAT()函数语法为DATE_FORMAT(date, format),常用格式符包括:%Y表示四位年份,%m表示两位月份,%d表示两位日期,%H表示24小时制小时,%i表示分钟,%s表示秒。
示例代码如下:
-- 将当前时间格式化为 年-月-日 时:分:秒 格式 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_time; -- 只格式化日期部分 SELECT DATE_FORMAT(CURDATE(), '%Y年%m月%d日') AS formatted_date;
三、日期时间计算函数
对日期进行加减计算是统计场景的常用操作,MySQL提供了DATE_ADD()和DATE_SUB()函数,PostgreSQL使用INTERVAL关键字,SQL Server使用DATEADD()函数。
MySQL的计算函数语法为DATE_ADD(date, INTERVAL expr unit),其中unit可以是DAY、MONTH、YEAR、HOUR等时间单位。
示例代码如下:
-- 当前时间加7天
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS add_seven_days;
-- 当前时间减3个月
SELECT DATE_SUB(NOW(), INTERVAL 3 MONTH) AS sub_three_months;
-- 计算两个日期的差值,返回天数
SELECT DATEDIFF('2024-05-20', '2024-05-10') AS date_diff_days;
四、时间戳与日期互转
时间戳是很多系统中存储时间的常用方式,需要掌握时间戳和日期格式的转换方法。MySQL中UNIX_TIMESTAMP()可以将日期转为时间戳,FROM_UNIXTIME()可以将时间戳转为日期。
示例代码如下:
-- 将当前日期时间转为时间戳 SELECT UNIX_TIMESTAMP(NOW()) AS current_timestamp; -- 将时间戳转为日期时间,格式化为指定格式 SELECT FROM_UNIXTIME(1716200000, '%Y-%m-%d %H:%i:%s') AS timestamp_to_date;
五、常见业务场景示例
实际业务中经常需要按时间维度统计数据,比如统计当天的订单量、当月的新增用户数等,以下是按天统计数据的示例:
-- 假设orders表有id和create_time字段,统计每天的订单数量
SELECT
DATE_FORMAT(create_time, '%Y-%m-%d') AS order_date,
COUNT(id) AS order_count
FROM orders
WHERE create_time >= CURDATE()
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
ORDER BY order_date;
使用时间函数时需要注意不同数据库的语法差异,编写跨数据库兼容的SQL时需要提前确认对应数据库的函数支持情况,避免语法错误。
SQL日期函数时间函数DATE_FORMAT时间戳转换修改时间:2026-07-07 13:48:28