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 SQL Where 子句查找超过 30 天的日期记录