7
votes

Comment sélectionner les dates entre deux dates données dans une requête Oracle?

Comment puis-je sélectionner des dates entre deux dates données dans une requête Oracle?


7 Réponses :


15
votes
SELECT TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum AS d
FROM all_objects
WHERE TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum <= TO_DATE('12/05/2003', 'MM/DD/YYYY')
fromhttp://forums.devshed.com/oracle-development-96/select-all-dates-between-two-dates-92997.html

6 commentaires

-1 Cet exemple de code (de la page liée) répond à une question légèrement différente et est plus compliqué que nécessaire pour la question posée ici.


@payne, Greg a donné la meilleure réponse jusqu'à présent. Tous les autres supposent qu'il y a une table impliquée. Accordé, c'est peut-être ce que l'OP voulait (par opposition à Dis ) Demandez, mais encore une fois, si quelqu'un est trop paresseux pour indiquer exactement ce qu'il veut, il devrait obtenir ce qu'il veut Il a demandé. Donc +1


Je suppose que avec l'exigence légèrement vague, il n'était pas clair que l'OP voulait choisir parmi une table - je suppose que nous découvrirons si et quand une réponse est acceptée.


Tout repos sur une table est indiqué sur la notion que votre plage de dates sera inférieure au nombre de lignes de la table. Si vous passez à une gamme de big dates, cette solution échoue. C'est pourquoi utiliser le niveau pseudocolumn comme ma solution est préférable car il est valide pour une gamme arbitrarte.


Supposons que si je dois prendre le démarrage comme sysdate (date actuelle) au lieu de la date précise, que puis-je faire?


Il suffit de remplacer les entrées TO_Date ('12 / 01/2003 ', MM / DD / AAAA') avec Current_TimeStamp



6
votes
SELECT * FROM your_table WHERE your_date_field BETWEEN DATE '2010-01-01' AND DATE '2011-01-01';

5 commentaires

Qui a dit quoi que ce soit du 1er janvier 2010 jusqu'au 1er janvier 2011, je viens d'aswell pourrait demander. Quelle est la différence??? Sysdate est une date au 1er janvier 2010


Eh bien, parce que la sysdate est légèrement différente de la date habituelle et sans explication de ce que Sysdate fait - il aurait plus de sens à s'en tenir à une date traditionnelle. Rien de mal avec Sysdate - mais il a besoin d'un peu plus d'explication que vous avez fournie.


@Ronnis - plutôt que simplement en baisse du vote, que diriez-vous de vous répondre à la question et de fournir une alternative?


@Andy Paton, je préfère préférer le vôtre si vous utilisiez des littéraux ou de la date.


Ok vous deux, arrêtez de vous battre ou je vais éliminer vos jouets ... et vous avez basculé tous les deux.



-1
votes

utiliser "entre". Dans un sens général:

select * from someTable where dateCol between date1 and date2;


0 commentaires

5
votes

Vous pouvez utiliser le niveau pseudocolumn de manière délicate de générer une série, par exemple, pour obtenir la liste des jours entre aujourd'hui et 20 jours, je peux:

select trunc(early_date+lvl) from
  (select level lvl from dual connect by level < (later_Date-early_date-1) )
order by 1 


0 commentaires

-1
votes

avec All_days comme (sélectionnez Trunc (TO_Date ('12 -03-2017 ',' DD-MM-AAAAYY ') + Levl) -1 comme All_dates de (Sélectionnez le niveau de levier à partir de double connexion par niveau <(sysdate-to_date ('12 -03-2017 ',' dd-mm-aaaayy ') + 1)) commander par 1) Sélectionnez Compte (*) comme no_of_days de tous les jours où Ltrim (RTRIM (TO_CHAR (All_Dates, 'Day'))) Pas in ('Samedi', 'Dimanche');


1 commentaires

Cette requête ne génère pas une liste de dates.



0
votes

Je le fais si souvent pour une application de planification, je travaille à ce que j'ai créé une fonction de table pipeline. Parfois, j'ai besoin de jours, d'heures ou de 15 minutes entre fois. Ce n'est pas exactement ma fonction, car mon code est dans un package. Par exemple, ici, je reçois des journées entre le 1 er janvier 2020 et le 10 janvier 2020: xxx

la fonction pipeline: xxx


0 commentaires

1
votes

Vous pouvez également utiliser ci-dessous pour obtenir une liste des dates de calendrier entre une plage de dates (similaire à la solution de Michael Bougenon) xxx


0 commentaires