上一篇
如何从数据库获取当前时间?
- 数据库
- 2025-07-05
- 3972
数据库获取当前时间通常使用内置函数,不同数据库系统函数不同,如 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:
- 默认时间可能基于数据库服务器的系统时区(如
-
函数执行时机:
- 部分函数(如 PostgreSQL 的
NOW()
)在事务开始时确定时间,多次调用返回相同值。 - 实时获取需用非事务函数(如 PostgreSQL 的
CLOCK_TIMESTAMP()
)。
- 部分函数(如 PostgreSQL 的
-
存储数据类型:
- 日期时间类型因数据库而异(如 Oracle 的
DATE
,MySQL 的DATETIME
),插入数据时需匹配。
- 日期时间类型因数据库而异(如 Oracle 的
应用场景示例
-
插入操作时间戳:
-- 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