如何通过DATE或CAST函数在SQL中剔除日期字段的时间信息?
- 内容介绍
- 相关推荐
本文共计877个文字,预计阅读时间需要4分钟。
MySQL、PostgreSQL(14+)、SQLite 都支持 `DATE()` 函数,它直接提取时间戳中的日期部分,只保留年、月、日,不包括时间。注意,并非所有数据库都叫这个名字——例如 SQL Server 没有这个 `DATE()` 函数,使用它会导致错误 `Invalid column name 'DATE'`。
常见错误是把 DATE() 当作类型转换函数乱套,比如写成 DATE(CAST(created_at AS DATE)),纯属冗余;只要字段是 DATETIME 或 TIMESTAMP 类型,DATE(created_at) 就够了。
- MySQL:✅ 支持,
WHERE DATE(order_time) = '2024-05-20' - PostgreSQL:✅ 14+ 支持,旧版需用
created_at::DATE - SQLite:✅ 支持,
DATE('now')也行 - SQL Server:❌ 不支持,会提示“无法解析的函数名”
SQL Server 必须用CAST(... AS DATE)或CONVERT(DATE, ...)
SQL Server 的 DATE 是一种独立数据类型,不能当函数用。想截掉时间,得显式类型转换。用 CAST 更标准,CONVERT 多一个风格参数但没必要。
本文共计877个文字,预计阅读时间需要4分钟。
MySQL、PostgreSQL(14+)、SQLite 都支持 `DATE()` 函数,它直接提取时间戳中的日期部分,只保留年、月、日,不包括时间。注意,并非所有数据库都叫这个名字——例如 SQL Server 没有这个 `DATE()` 函数,使用它会导致错误 `Invalid column name 'DATE'`。
常见错误是把 DATE() 当作类型转换函数乱套,比如写成 DATE(CAST(created_at AS DATE)),纯属冗余;只要字段是 DATETIME 或 TIMESTAMP 类型,DATE(created_at) 就够了。
- MySQL:✅ 支持,
WHERE DATE(order_time) = '2024-05-20' - PostgreSQL:✅ 14+ 支持,旧版需用
created_at::DATE - SQLite:✅ 支持,
DATE('now')也行 - SQL Server:❌ 不支持,会提示“无法解析的函数名”
SQL Server 必须用CAST(... AS DATE)或CONVERT(DATE, ...)
SQL Server 的 DATE 是一种独立数据类型,不能当函数用。想截掉时间,得显式类型转换。用 CAST 更标准,CONVERT 多一个风格参数但没必要。

