如何在AIRPORT表中仅比较日期而非时间来匹配两列
仅比较日期忽略时间的SQL查询方案
给定表AIRPORT,包含Arriving和Departure两列,数据如下:
| Arriving | Departure |
|---|---|
| 01-04-22 12:00:00 | 01-04-22 12:00:00 |
| 01-04-22 12:00:00 | 01-04-22 12:00:00 |
| 01-04-22 12:00:00 | 01-04-22 16:00:00 |
直接使用select * from airport where arriving= departure只能匹配时间完全一致的前两行,要获取所有日期相同的行,需忽略时间部分进行比较,以下是不同数据库的实现方案:
各数据库具体实现
MySQL/MariaDB
使用DATE()函数提取日期部分:
SELECT * FROM AIRPORT WHERE DATE(Arriving) = DATE(Departure);
SQL Server
通过CAST或CONVERT将字段转换为DATE类型(仅保留日期):
-- CAST 方式 SELECT * FROM AIRPORT WHERE CAST(Arriving AS DATE) = CAST(Departure AS DATE); -- CONVERT 方式 SELECT * FROM AIRPORT WHERE CONVERT(DATE, Arriving) = CONVERT(DATE, Departure);
Oracle
使用TRUNC()函数截断时间部分,只保留日期:
SELECT * FROM AIRPORT WHERE TRUNC(Arriving) = TRUNC(Departure);
PostgreSQL
两种常用方式:
-- 方式1:DATE_TRUNC 截断到天 SELECT * FROM AIRPORT WHERE DATE_TRUNC('day', Arriving) = DATE_TRUNC('day', Departure); -- 方式2:直接转换为DATE类型 SELECT * FROM AIRPORT WHERE Arriving::DATE = Departure::DATE;
核心逻辑
所有方案的本质都是提取日期时间字段的纯日期部分,再对这两个日期值进行比较,从而忽略时间差异,匹配所有日期相同的行。
内容的提问来源于stack exchange,提问作者Unkown112 Sha
相关产品推荐
相关产品推荐

