web-dev-qa-db-fra.com

requête Oracle entre deux dates avec des heures

Ceci est ma table Oracle actuelle:

  • DATE = date
  • HEURE = nombre
  • RUN_DURATION = nombre

 enter image description here

J'ai besoin d'une requête pour obtenir RUN_DURATION entre deux dates with hours like

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?

Par exemple, toutes les données entre le 30.10.14 11:00:00 et le 30.10.14 15:00:00

J'ai collé pour obtenir les heures aux dates. J'ai essayé d'ajouter les heures dans myStartDate mais cette date sera ignorée car BETWEEN. Je sais que BETWEEN ne devrait pas être utilisé pour les dates, mais je ne peux pas essayer d'autres occasions, car je ne sais pas. comment obtenir DATE et HOUR ensemble ... Merci!

4
Kᴀτᴢ

UnDATEa les deux éléments date et heure. Pour ajouter des heures à ce jour, il vous suffit de faire des calculs. 

Par exemple,

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

Ajoute 1 heure à sysdate. Donc, si vous avez une colonne de type date, ajoutez simplement le nombre d’heures à ajouter divisé par 24 car vous ajoutez le nombre de jours à une date. Il suffit donc de convertir le nombre d’heures en date en hours/24.

4
Lalit Kumar B

Eh bien, vous pouvez ajouter une heure à votre date de terrain de cette façon

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

cela vous donnera (à partir de votre premier échantillon, peut être différent en fonction de votre format)

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

Sur cette base, vous pouvez faire n'importe quel choix, sélectionnez ce dont vous avez besoin.

Dans ton cas

where "DATE" + (hour / 24 )

qui ferait

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') 

voir SqlFiddle

(Au fait, n'utilisez pas de mots-clés réservés pour le nom de colonne, mais je suppose qu'il ne s'agit que d'un exemple).

4
Raphaël Althaus

Si vous souhaitez ajouter min à date, vous pouvez utiliser interval.

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

Alors,

Select * 
from Datatable 
where 
DATE BETWEEN myStartDate + interval to_char(HOURS) hour 
and myEndDate + interval to_char(HOURS) hour
1
Praveen
SELECT * 
FROM table 
WHERE date BETWEEN start_date +  NUMTODSINTERVAL( hour, 'HOUR' ) AND end_date +  NUMTODSINTERVAL( hour, 'HOUR' )
0