上一篇
如何从数据库获取当前时间?
- 数据库
- 2025-07-05
- 7
数据库 获取当前时间通常使用内置函数,不同数据库系统函数不同,如 MySQL 的 NOW() 或 CURRENT_TIMESTAMP,SQL Server 的 GETDATE(),Oracle 的 SYSDATE,SQLite 的 date('now'),这些函数直接执行即可返回服务器当前日期和时间。
常见数据库获取当前时间的方法
MySQL / MariaDB
- 函数:
- NOW():返回当前日期和时间(格式:YYYY-MM-DD HH:MM:SS)。
- CURDATE():仅返回当前日期(YYYY-MM-DD)。
- CURTIME():仅返回当前时间(HH:MM:SS)。
- 示例: SELECT NOW(); -- 输出:2025-10-05 14:30:45
SQL Server
- 函数:
- GETDATE():返回当前数据库系统的日期和时间。
- SYSDATETIME():更高精度的时间(包含毫秒)。
- 示例: SELECT GETDATE(); -- 输出:2025-10-05 14:30:45.123
Oracle
- 函数:
- SYSDATE:返回数据库服务器操作系统的当前日期和时间。
- CURRENT_TIMESTAMP:带时区信息的时间戳。
- 示例: SELECT SYSDATE FROM DUAL; -- 输出:05-OCT-2025 14:30:45
PostgreSQL
- 函数:
- NOW():返回当前事务开始的时间戳(含时区)。
- CURRENT_TIMESTAMP:功能同 NOW()。
- CURRENT_DATE / CURRENT_TIME:分别获取日期或时间。
- 示例: SELECT NOW(); -- 输出:2025-10-05 14:30:45+08
SQLite
- 函数:
- CURRENT_TIMESTAMP:返回UTC时间的字符串(格式:YYYY-MM-DD HH:MM:SS)。
- DATE('now') / TIME('now'):获取日期或时间。
- 示例: SELECT CURRENT_TIMESTAMP; -- 输出:2025-10-05 06:30:45 (UTC时间)
关键注意事项
-
时区问题:
- 默认时间可能基于数据库服务器的系统时区(如 SYSDATE)。
- 需显式指定时区时,可用函数如:
- PostgreSQL:NOW() AT TIME ZONE 'Asia/Shanghai'
- MySQL:CONVERT_TZ(NOW(), 'UTC', 'Asia/Shanghai')
-
函数执行时机:

- 部分函数(如 PostgreSQL 的 NOW())在事务开始时确定时间,多次调用返回相同值。
- 实时获取需用非事务函数(如 PostgreSQL 的 CLOCK_TIMESTAMP())。
-
存储数据类型:
- 日期时间类型因数据库而异(如 Oracle 的 DATE,MySQL 的 DATETIME),插入数据时需匹配。
应用场景示例
-
插入操作时间戳:

-- MySQL示例 INSERT INTO orders (product, created_at) VALUES ('Book', NOW()); -
条件筛选:
-- SQL Server示例 SELECT * FROM logs WHERE event_time > GETDATE() - 1; -- 查询24小时内日志
获取当前时间需根据数据库类型选择对应函数:
- 标准函数:NOW()(MySQL/PostgreSQL)、GETDATE()(SQL Server)、SYSDATE(Oracle)。
- 时区敏感场景:显式转换时区或使用 CURRENT_TIMESTAMP。
- 高频写入场景:避免在事务中重复调用,优先使用一次获取的值。
正确使用时间函数可提升数据一致性和查询效率,建议结合官方文档测试验证。
引用说明: 参考各数据库官方文档的最佳实践:
- MySQL 8.0 Date and Time Functions
- SQL Server GETDATE() Documentation
- Oracle SYSDATE Explanation
- PostgreSQL Date/Time Functions
- SQLite Date And Time Functions