小编典典

无法获取Oracle TO DATE上的记录

sql

数据库-表

 PROD.APPLICATION 
Game ID    Generated Date

 1          Jan-01-1995
 2          Aug-19-2003
 3          Nov-04-2001
 4          Sep-26-2007
 5          Sep-26-2007
 6          Sep-26-2007
 7          Sep-19-2007
 8          Sep-19-2007
 9          Sep-19-2007
10          Jan-11-1985
11          MAY-19-2003
12          Sep-22-2007
13          Sep-22-2007

我运行了以下查询

SELECT *
FROM PROD.APPLICATION JOIN PROD.STATUS ON (PROD.STATUS_ID = REF_STATUS.STATUS_ID)

AND PROD.APPLICATION.GENERETED_DT >= to_date('2007-09-19', 'yyyy-MM-dd') AND     
    PROD.APPLICATION.GENERETED_DT <= to_date('2007-09-26', 'yyyy-MM-dd');

搜索从2007年9月19日到2007年9月26日的记录,即8条记录。

这导致只显示2007年9月19日至2007年9月22日的记录,即仅5条记录

Actual Output
Game ID    Generated Date
7 Sep-19-2007
8 Sep-19-2007
9 Sep-19-2007
12 Sep-22-2007
13 Sep-22-2007

如何生成搜索查询,以便我可以获取所有8条记录-即这些日期的记录

预期产量

 4 Sep-26-2007
 5 Sep-26-2007
 6 Sep-26-2007
 7 Sep-19-2007
 8 Sep-19-2007
 9 Sep-19-2007
12 Sep-22-2007
13 Sep-22-2007

试过了

SELECT *
FROM PROD.APPLICATION JOIN PROD.STATUS ON (PROD.STATUS_ID = REF_STATUS.STATUS_ID)

AND PROD.APPLICATION.GENERETED_DT >= to_date('2007-09-19', 'yyyy-MM-dd') AND     
    PROD.APPLICATION.GENERETED_DT = to_date('2007-09-26', 'yyyy-MM-dd');

暂无记录


阅读 180

收藏
2021-04-07

共1个答案

小编典典

该日期可能具有时间成分。这是dateOracle数据类型的一部分-但查询时通常不会显示。

更好的方法使用以下逻辑:

SELECT *
FROM PROD.APPLICATION A JOIN
     PROD.STATUS S
     ON A.STATUS_ID = S.STATUS_ID  
WHERE A.GENERATED_DT >= DATE '2007-09-19' AND
      A.GENERATED_DT < DATE '2007-09-27';

笔记:

  • < DATE '2007-09-27'会包括来自前一天的所有日期时间。
  • DATE关键字引入与格式YYYY-MM-DD的日期常量。
  • 表别名使查询更易于编写和阅读。
  • 将条件移至WHERE子句对查询没有影响,但这种过滤更常见的是在WHERE子句中对进行INNER JOIN
2021-04-07