sql日期函数用于获取、提取、计算和格式化时间数据,核心包括now()/current_date获取当前时间,year/month/day等提取日期部分,date_add/dateadd加减时间,datediff计算间隔,date_format/to_char格式化输出,str_to_date/to_date转换字符串为日期类型。

SQL日期函数主要用来获取、提取、计算和格式化时间数据,不同数据库语法略有差异,但核心逻辑一致。用对函数能省去大量字符串拼接和业务层处理。
获取当前时间最常用写法
多数数据库都支持 NOW() 或 CURRENT_DATE 这类基础函数:
- NOW() 返回完整日期时间(如 2026-03-04 01:52:00),适合记录操作时间戳
- CURRENT_DATE 只返回日期部分(2026-03-04),常用于按天统计或条件过滤
- SQL Server 推荐用 GETDATE() 替代 NOW();PostgreSQL 和 Oracle 也兼容 CURRENT_TIMESTAMP
从日期中提取年月日或时分秒
当字段是 DATETIME 或 TIMESTAMP 类型,想单独取某一部分,直接用对应函数即可:
- YEAR(date)、MONTH(date)、DAY(date) —— 提取整数形式的年、月、日
- HOUR(time)、MINUTE(time)、SECOND(time) —— 适用于时间类型或带时间的日期
- SQL Server 还可用 DATEPART(yy, date),功能更灵活,支持周、季度、一年第几天等
加减时间与计算间隔
做周期统计、过期判断、趋势分析时离不开时间运算:
- DATE_ADD(date, INTERVAL 7 DAY)(MySQL)或 DATEADD(day, 7, date)(SQL Server)—— 给日期加7天
- DATE_SUB(date, INTERVAL 1 MONTH) 或 DATEADD(mm, -1, date) —— 减一个月
- DATEDIFF('2026-03-04', '2026-02-20') 返回天数差(12);SQL Server 的 DATEDIFF(day, start, end) 还可算小时、月、年
格式化输出和类型转换
展示给用户看的时间,通常需要统一格式;导入数据时又常需把字符串转成日期:
- DATE_FORMAT(date, '%Y年%m月%d日 %H:%i')(MySQL)可输出“2026年03月04日 01:52”
- TO_CHAR(date, 'YYYY-MM-DD HH24:MI')(Oracle/PostgreSQL)作用类似
- STR_TO_DATE('2026/03/04', '%Y/%m/%d') 或 TO_DATE('2026-03-04', 'YYYY-MM-DD') 把字符串转为日期类型,避免隐式转换出错










