web-dev-qa-db-fra.com

SQL: Obtenir les enregistrements créés dans la plage de temps pour des dates spécifiques

J'ai un ensemble d'enregistrements qui ont été créés la semaine dernière et parmi ceux que je souhaite récupérer, seuls ceux qui ont été créés entre 6h45 et 19h15. J'ai une colonne creation_date que je peux utiliser.

Comment puis-je faire cela en SQL?

10
Mouna Cheikhna

Dans Oracle, nous pouvons transformer les dates en chiffres et leur appliquer l'arithmétique de différentes façons. 

Par exemple, sysdate-7 nous donne la date il y a sept jours. trunc(some_date) supprime l'élément time d'une colonne de date. Et to_char(some_date, 'SSSSS') nous donne son élément de temps en tant que nombre de secondes depuis minuit. Donc, 06:45:00 correspond à 24300 secondes et 18:15:59 à 69359 secondes (veuillez vérifier ces chiffres, car ils sont très précis).

Quoi qu'il en soit, mettre tout cela ensemble dans une seule requête comme celle-ci ...

select *
from your_table
where creation_date >= trunc(sysdate)-7
and to_number(to_char(creation_date, 'sssss')) between 24300 and 69359

... produira tous les enregistrements créés la semaine dernière avec un élément de temps compris dans les heures principales.

15
APC

Cette requête renvoie tous les enregistrements créés au cours des 7 derniers jours avec la partie heure de leur date de création, entre 6h45 et 19h15.

select * 
  from your_table
 where creation_date > sysdate - 7
   and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
   and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
3
Doug Porter

Sur la base des critères ci-dessus, cela ramènera des enregistrements de la dernière semaine entre dimanche et samedi entre 06:45:00 et 19:15:59.

Vous pouvez régler le "- 7" et le "+ 6" sur des nombres différents si vous souhaitez que la plage de semaines soit différente (par exemple, si votre semaine est du lundi au dimanche).

select * 
from your_table
where creation_date >= TRUNC(SYSDATE, 'WW') - 7
and creation_date <= (TRUNC(SYSDATE, 'WW') - 7) + 6
and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00'
0
Zack Macomber