从Oracle数据库中检索日期列表

时间:2016-02-22 08:39:28

标签: oracle

我有一张这样的表

Start_Date                       End_Date

21-02-2016 11:04:41              23-02-2016 11:04:41
21-02-2016 14:03:29              25-02-2016 14:03:29
22-02-2016 14:03:29              25-02-2016 14:03:29

如果输入为21-Feb-2016,那么我想在给定输入介于Start_DateEnd_Date之间时获取所有行。在这些情况下,输出应为

Output(truncating the time part)
Start_Date                            End_Date
21-02-2016                            23-02-2016
21-02-2016                            25-02-2016

我尝试了以下查询,但不知怎的,它没有给我所需的结果。

Select Start_Date,End_Date from TEST where Start_Date<=21-02-2016 and End_Date>=23-02-2016.

有人可以告诉我哪里犯了错误并为其提供了适当的解决方案

3 个答案:

答案 0 :(得分:0)

也许您还应该使用trunc函数来过滤日期

Select Start_Date,End_Date from TEST 
where to_date('21-02-2016','dd-mm-yyyy') between trunc(start_date) and trunc(end_date)

答案 1 :(得分:0)

如果您的表格字段采用日期格式,则需要以下内容:

select *
from test
where to_date('21-02-2016', 'dd-mm-yyyy') between trunc(start_date) and trunc(end_date)

否则,如果它们存储为字符串(我希望不存在),则需要:

select *
from test
where to_date('21-02-2016', 'dd-mm-yyyy') between
        trunc( to_date(start_date,'dd-mm-yyyy hh24:mi:ss') ) and
        trunc( to_date(end_date,  'dd-mm-yyyy hh24:mi:ss') )

答案 2 :(得分:0)

SELECT DISTINCT
       TRUNC( start_date ) AS truncated_start_date,
       TRUNC( end_date )   AS truncated_end_date
FROM   your_table
WHERE  DATE '2016-02-21' BETWEEN TRUNC( start_date ) AND TRUNC( end_date )