7
votes

Plage de date dans PL / SQL (Oracle)

Si j'ai une table avec une colonne de date appelée mydate , avec des valeurs telles que 2009-08-25 09: 00: 09.0 .

Je veux sélectionner toutes les lignes pour août 25 , de 12:00:01 AM jusqu'à 11:59:59 et rien Pour août 26 . Est-il suffisant d'utiliser simplement la condition: xxx

et je souhaite sélectionner toutes les lignes avant août 25 , ne comprenant pas le 25 août. Puis-je faire : xxx


0 commentaires

4 Réponses :


15
votes

Si vous souhaitez des données pour la journée complète 25 et à l'exclusion de tous les 26, vous devez supprimer la première seconde de la 26:

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second


9 commentaires

Que voulez-vous dire au début du 26. Si vous n'incluez pas - 1/24/60/60 dans votre deuxième requête, quel problème peut-il avoir?


Le 26 commence à 00:00, donc si vous voulez exclure tous les 26, vous devez supprimer explicitement cette seconde


Oui, il n'inclut que 8-26 12h00h00h00. Pas une minute après. Les chances d'une rangée se produisent exactement à minuit, c'est bon, c'est bon?


+1 Et vous voudrez peut-être envisager la deuxième notation d'intervalle plus verbeuse, au lieu de 1/24/60/60.


@Saobi: J'ai mis à jour ma réponse: parfois des dates sont stockées sans l'information temporelle (car elle n'est pas pertinente ou inconnue), dans ce cas, ils sont stockés avec un segment de temps de '12: 00h00: 00: C'est pourquoi il est plus sûr de supprimer cette première seconde


Attendez, si les dates sont stockées sans temps (12:00:00), là où la mydate entre la date '2009-08-25' et la date '2009-08-26' n'incluent pas le 08-26, non?


@Saobi: Si les dates sont stockées sans temps, votre entre les 08-25 et le 08-26


Quelle est la requête pour vérifier si des dates contiennent minuit?


Si vous souhaitez vérifier si le composant horaire d'une date contient minuit, vous pouvez effectuer une recherche avec ceci: "Où Trunc (mydate) = mydate", vous pouvez également vérifier que le temps est 00: "Où_char (mydate," hh24miss ' ) = '000000' "



-2
votes
SELECT   *
FROM   TABLE
 WHERE   myDate BETWEEN myDate  ('08/25/2009', 'MM/DD/YYYY')
                         AND  myDate  ('08/26/2009', 'MM/DD/YYYY')  

1 commentaires

Il a oublié de dire avant les supports



2
votes

Pour tout obtenir entre le 25 août, à 12h00:01 jusqu'à 11h59:59, inclus, essayez ceci:

Where myDate < to_Date('yyyymmdd', '20090825')


0 commentaires

0
votes

Ce trunct l'année mais vous obtenez mon gist: xxx


0 commentaires