Ceci est ma table Oracle actuelle:
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!
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
.
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).
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
SELECT *
FROM table
WHERE date BETWEEN start_date + NUMTODSINTERVAL( hour, 'HOUR' ) AND end_date + NUMTODSINTERVAL( hour, 'HOUR' )