You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Oracle 19c中如何查询同一日期内21:00至24:00时间段创建的记录

Oracle 19c中如何查询同一日期内21:00至24:00时间段创建的记录

没问题,我来帮你搞定这个查询需求!针对Oracle 19c里DATE类型的created_date字段,要筛选同一日期内21:00(9PM)到当天结束(23:59:59,也就是你说的午夜12PM)的记录,有几种实用的方法,你可以根据习惯选择:

方法一:通过提取小时数筛选

利用EXTRACT函数提取时间中的小时部分,判断是否处于21到23之间(因为当天的24点实际是次日0点,不属于同一日期):

SELECT *
FROM your_table_name
WHERE EXTRACT(HOUR FROM CAST(created_date AS TIMESTAMP)) BETWEEN 21 AND 23;

这里把DATE转成TIMESTAMP是为了更稳妥地提取小时,Oracle的DATE类型本身也包含时间信息,直接用EXTRACT(HOUR FROM created_date)也能生效,但转成TIMESTAMP兼容性更好。

方法二:用字符串格式匹配小时

通过TO_CHAR把时间转成24小时制的小时字符串,筛选大于等于21的记录:

SELECT *
FROM your_table_name
WHERE TO_CHAR(created_date, 'HH24') >= '21';

这个写法最简洁,因为从21点到当天结束的所有记录,小时数都是21、22、23,满足>= '21'的条件。

方法三:直接比较日期时间范围(推荐)

如果你的created_date字段上有索引,这种写法能更好地利用索引,提升查询性能:

SELECT *
FROM your_table_name
WHERE created_date >= TRUNC(created_date) + 21/24
  AND created_date < TRUNC(created_date) + 1;

解释一下:

  • TRUNC(created_date)会把日期截断到当天0点,加上21/24就是当天21:00(因为1天=24小时,21/24就是21小时)
  • TRUNC(created_date) + 1是次日0点,用<而不是<=,可以避免误把次日0点的记录包含进来

这几种方法都能精准筛选出你需要的5条样本记录,选最适合你的就行!

备注:内容来源于stack exchange,提问作者epipko

火山引擎 最新活动