Oracle:where 子句日期查询的问题

Posted

技术标签:

【中文标题】Oracle:where 子句日期查询的问题【英文标题】:Oracle: issue with where clause date query 【发布时间】:2015-12-21 07:58:11 【问题描述】:

环境:oracle数据库

我有一个列名为 DateOfAct 的表,它是 Date 数据类型,包含日期和时间(例如:2015-10-28 21:21:10,2015 -10-29 11:09:45)

我需要获取一天 20-12-2015 从早上 12:00:00 到晚上 23:59:59 的记录强>

 select * from my_table 
 where DateOfAct >= to_date('20-12-2015 00:00:00' , 'dd-mm-yyyy 24HH:MI:SS')
 and   DateOfAct <= to_date('20-12-2015 23:59:59', 'dd-mm-yyyy 24HH:MI:SS')

【问题讨论】:

你能定义你正在解决的具体问题吗? 到底是什么问题?你有错误吗? 尝试使用 DateOfAct BETWEEN '20-12-2015 00:00:00' AND '20-12-2015 23:59:59' 【参考方案1】:

以下代码应该可以解决您的问题: 在日期格式中输入 'HH24' 而不是 '24HH'

 select * from my_table 
 where DateOfAct >= to_date('20-12-2015 00:00:00' , 'dd-mm-yyyy HH24:MI:SS')
 and   DateOfAct <= to_date('20-12-2015 23:59:59', 'dd-mm-yyyy HH24:MI:SS')

【讨论】:

【参考方案2】:

不明白这里有什么问题..但是你可以尝试使用 between。

select * 
from my_table 
where DateOfAct between to_date('20151220000000','YYYYMMDDHH24MISS') 
      and to_date('20151220235959','YYYYMMDDHH24MISS');

【讨论】:

【参考方案3】:

从早上 12:00:00 开始到晚上 23:59:59

在你的查询开始日期是to_date('20-12-2015 00:00:00' , 'dd-mm-yyyy 24HH:MI:SS') - 00:00 (HH24:mi),如果你想要 12:00 (HH24:mi) 应该是 to_date('20-12-2015 12:00:00' , 'dd-mm-yyyy HH24:MI:SS')

select * 
  from my_table 
 where DateOfAct between to_date('20-12-2015 12:00:00', 'dd-mm-yyyy HH24:MI:SS') 
                     and to_date('20-12-2015 23:59:59', 'dd-mm-yyyy HH24:MI:SS')

【讨论】:

【参考方案4】:

查询可以更改为

select * from my_table where trunc(DateOfAct)='20-Dec-2015'

解释:

trunc 函数从日期中删除时间部分,并允许您只比较日期值而不比较时间。

【讨论】:

为什么是trunc(DateOfAct)='20-Dec-2015'?当您可以如此轻松地将字符串转换为日期时,为什么要将日期与字符串进行比较 - 事实上,OP 试图这样做(尽管格式掩码略有不正确)?我对此表示反对。更正它,我会撤销反对票。

以上是关于Oracle:where 子句日期查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle_where子句

Oracle SQL Where 子句查找超过 30 天的日期记录

在 Oracle 查询中将连接从 Where 子句移动到 From 子句

在 where 子句中执行 Oracle 查询

Laravel 查询不使用 where 子句作为日期

Oracle:有效地使用where子句过滤时间戳列以获取特定日期的所有记录