如何在DB2中仅按日期查询Timestamp类型列?
按日期/时间部分查询Timestamp列的解决方案
你的created列是Timestamp类型,存储的是完整的日期+时间,直接用= '2024-02-12'只会匹配时间恰好为2024-02-12 00:00:00的行,所以返回空结果。以下是几种可行的解决方法:
一、范围查询(推荐,性能最优)
通过指定日期的起始和结束范围来匹配当天所有行,这种方式可以利用created列的索引,查询效率更高:
SELECT * FROM MyTable WHERE created >= '2024-02-12' AND created < '2024-02-13';
>= '2024-02-12'匹配当天00:00:00及之后的行,< '2024-02-13'匹配次日00:00:00之前的行,刚好覆盖整个目标日期的所有时间点。
二、提取日期部分匹配
通过数据库内置函数提取Timestamp的日期部分,再与目标日期比较。注意:这种方式会对created列做函数转换,可能导致索引失效,数据量大时不推荐。
不同数据库的实现:
- MySQL/MariaDB:使用
DATE()函数
SELECT * FROM MyTable WHERE DATE(created) = '2024-02-12';
- PostgreSQL:使用类型转换
::date或DATE()函数
SELECT * FROM MyTable WHERE created::date = '2024-02-12'; -- 或等价写法 SELECT * FROM MyTable WHERE DATE(created) = '2024-02-12';
- SQL Server:使用
CONVERT()或CAST()转换为日期类型
SELECT * FROM MyTable WHERE CONVERT(date, created) = '2024-02-12'; -- 或等价写法 SELECT * FROM MyTable WHERE CAST(created AS date) = '2024-02-12';
三、按时间部分查询
如果需要仅匹配某一时间段(比如某小时、某分钟),同样可以用范围或提取时间的方式:
范围查询示例(查询2024-02-12当天14点的所有行):
SELECT * FROM MyTable WHERE created >= '2024-02-12 14:00:00' AND created < '2024-02-12 15:00:00';
提取时间部分示例:
- MySQL:
TIME(created) BETWEEN '14:00:00' AND '14:59:59' - PostgreSQL:
created::time BETWEEN '14:00:00' AND '14:59:59' - SQL Server:
CONVERT(time, created) BETWEEN '14:00:00' AND '14:59:59'
内容的提问来源于stack exchange,提问作者Oidipous_REXX
相关产品推荐
相关产品推荐

