You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:45:05