不同数据库获取当天开始时间的方法各异,核心是截断时间部分。MySQL用DATE()或CAST;SQL Server推荐CONVERT或DATEADD+DATEDIFF;Oracle使用TRUNC(SYSDATE);跨平台可采用日期转字符串后拼接'00:00:00'的方式实现。

在 SQL 中获取当天开始时间(即当天 00:00:00)的方法因数据库类型而异,但核心思路是将当前日期的时间部分截断或重置为零。以下是几种常见数据库的实现方式。
使用 DATE() 或 CAST 函数(MySQL)
MySQL 中可以通过 DATE() 提取日期部分,再转换为 datetime 类型来获得当天开始时间:
- SELECT DATE(NOW())
- SELECT CAST(CURDATE() AS DATETIME)
- SELECT STR_TO_DATE(DATE(NOW()), '%Y-%m-%d')
这三条语句都会返回类似 2024-04-15 00:00:00 的结果。
使用 CONVERT 或 DATEADD(SQL Server)
SQL Server 常用 CONVERT 或结合 DATEADD 与 DATEDIFF 来清空时间部分:
- SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()))
- SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
第一种更直观,第二种效率更高,尤其适合大数据量查询。
使用 TRUNC(Oracle)
Oracle 提供了 TRUNC 函数,可直接将日期时间截断到天级别:
默认行为就是归零时间部分,返回当天 00:00:00。
通用方法:日期转字符串再拼接(跨平台兼容)
如果需要兼容多种数据库,可以先提取日期字符串,再拼接 '00:00:00':
这种方法逻辑清晰,便于理解,适合初学者使用。
基本上就这些常用方式。选择哪种取决于你使用的数据库系统和性能要求。关键是理解“开始时间”本质是“日期部分 + 时间归零”。










