Oracle查询两个日期之间的小时数。

7

这是我的当前 Oracle 数据表:

  • DATE = 日期(date)
  • HOUR = 数字
  • RUN_DURATION = 数字

enter image description here

我需要查询在两个日期之间的带有小时数的 RUN_DURATION,类似于:

Select * from Datatable where DATE BETWEEN to_date('myStartDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS? and to_date('myEndDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS?

例如,在 30.10.14 11:00:00 和 30.10.14 15:00:00 之间的所有数据。

我遇到了在日期中获取小时数的问题。我尝试将小时数添加到 myStartDate 中,但是由于 BETWEEN,开始日期会被忽略。 我知道不应该在日期上使用 BETWEEN,但是我无法尝试其他机会,因为我不知道如何同时获取 DATEHOUR... 谢谢!


使用 BETWEEN 进行日期查询是完全没有问题的。您是想将 HOUR 列添加到 DATE 列中吗?这非常不清楚。 - Nick.McDermaid
这里的问题是将日期与小时分开。您需要再次将它们组合起来进行查询,使用类似于(日期+小时/24)的东西。 - David Aldridge
@Nick.McDermaid 我需要例如在10.08.15 08:00和11.08.15 10:00之间的所有日期数据。 - Kᴀτᴢ
你的示例中的日期与你的屏幕截图没有关联。请编辑你的问题并解释你希望从问题中显示的样本行。 - Nick.McDermaid
@Nick.McDermaid 这个表有数百万条记录和其他字段。我进行了一个查询并更新了截图,希望现在清楚了。例如,我需要在30.10.14 11:00:00和30.10.14 15:00:00之间的所有数据,结果应该是HOUR为12、13和14的记录。 - Kᴀτᴢ
如果您想要在这些日期之间的数据... 您期望返回哪些行? - Nick.McDermaid
4个回答

10

好的,你可以通过这种方式向你的日期字段添加小时

select "DATE" + (hour / 24) from <yourTable>

这将为您提供(从您的第一个样本中获取,可能会根据您的格式而有所不同)

August, 14 2015 10:00:00 
August, 14 2015 08:00:00 

基于此,您可以在其中做任何操作,选择您需要的内容。

在您的情况下

where "DATE" + (hour / 24 )

这将会使

Select * 
from Datatable 
where "DATE" + (hour / 24 )
 BETWEEN to_date('30/10/2014 11:00:00', 'dd/mm/yyyy hh24:mi:ss')  and            
         to_date('30/10/2014 15:00:00', 'dd/mm/yyyy hh24:mi:ss') 

请查看SqlFiddle(顺便说一下,不要使用保留关键字作为列名,但我想这只是一个示例)。


谢谢,非常好用。感谢您提供保留关键字的提示,这是一个给定的表格,所以我不能更改名称。在我的C#查询中让我有些沮丧,直到有人告诉我使用 \"DATE\" 作为字段名。 - Kᴀτᴢ

7
一个日期包含日期和时间元素。要在日期上添加小时,您只需要进行一些数学计算。
例如,
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT SYSDATE, SYSDATE + 1/24 FROM dual;

SYSDATE             SYSDATE+1/24
------------------- -------------------
2015-08-14 15:02:59 2015-08-14 16:02:59

将1小时添加到sysdate中。因此,如果您有一个日期数据类型的列,请添加要添加的小时数除以24,因为您需要将天数添加到日期。所以,您只需要首先将小时数转换为日期形式,如hours/24


4

如果你想将min加到date上,你可以使用interval

select sysdate, sysdate + interval '1' hour from dual

那么,

Select * 
from Datatable 
where 
DATE BETWEEN myStartDate + interval to_char(HOURS) hour 
and myEndDate + interval to_char(HOURS) hour

0
SELECT * 
FROM table 
WHERE date BETWEEN start_date +  NUMTODSINTERVAL( hour, 'HOUR' ) AND end_date +  NUMTODSINTERVAL( hour, 'HOUR' )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接