CURRENT_DATE是SQL标准函数,返回数据库服务器当前日期(YYYY-MM-DD格式),不包含时间。它在PostgreSQL、Oracle、SQLite中完全支持;MySQL支持但旧版本需加括号;SQL Server自2008起支持,Hive/Spark SQL则不支持。

CURRENT_DATE 是 SQL 标准中用于获取当前系统日期的函数,返回值为 DATE 类型(不包含时间部分),格式通常为 YYYY-MM-DD。它在大多数主流数据库(如 PostgreSQL、MySQL 8.0+、SQL Server、Oracle、SQLite)中都支持,但具体用法和兼容性略有差异。
基本用法:直接调用获取当天日期
最简单的使用方式是在 SELECT 语句中直接调用:
SELECT CURRENT_DATE;
执行后返回类似 2024-06-15 的结果(取决于你执行当天的实际日期)。
你也可以把它当作普通字段参与计算或拼接,例如:
- 作为默认值插入新记录:
INSERT INTO orders (order_date, amount) VALUES (CURRENT_DATE, 99.99); - 在 WHERE 中筛选今天的数据:
SELECT * FROM logs WHERE log_date = CURRENT_DATE;
注意时区与数据库配置的影响
CURRENT_DATE 返回的是数据库服务器所在时区的“今天”日期,不是客户端本地时间。这意味着:
- 如果数据库部署在 UTC 时区,而你在东八区,那么北京时间中午12点时,
CURRENT_DATE可能仍是前一天的日期(UTC 时间还没到当天零点); - 某些数据库(如 MySQL)允许通过
SET time_zone = '+08:00';临时调整会话时区,此时CURRENT_DATE也会随之变化; - PostgreSQL 中
CURRENT_DATE始终基于会话时区,可通过SHOW timezone;查看当前设置。
与其他日期函数的区别
别混淆这几个常用函数:
-
CURRENT_DATE→ 只有日期(2024-06-15) -
CURRENT_TIME→ 只有时间(14:30:22.123) -
CURRENT_TIMESTAMP或NOW()→ 日期 + 时间(2024-06-15 14:30:22.123)
如果你需要带时间戳的完整当前时刻,不要误用 CURRENT_DATE;反之,若只要日期部分,用 CURRENT_DATE 比截取 CURRENT_TIMESTAMP 更简洁、语义更清晰。
各数据库兼容性小贴士
虽然 CURRENT_DATE 是 SQL 标准函数,但仍有细节需留意:
- PostgreSQL / Oracle / SQLite: 完全支持,行为一致;
-
MySQL: 支持,但旧版本(如 5.7)中
CURRENT_DATE是函数,也可写作CURRENT_DATE()(带括号),两者等价; -
SQL Server: 支持
CURRENT_DATE(SQL:2008 起),但更常用CAST(GETDATE() AS DATE)或CONVERT(DATE, GETDATE()); -
注意: Hive、Spark SQL 等大数据引擎通常不支持
CURRENT_DATE,需改用TO_DATE(NOW())或DATE(NOW())。










