2016-05-09 2 views
0

Dans tous mes scripts, je veux interroger Oracle pour me donner des lignes ayant un horodatage inférieur à la date d'aujourd'hui (date du jour à 12 heures) et supérieur au dernier jour à (12 heures) Je suis déjà venu avec les scripts suivants:oracle: requête timestamp avec dates variables

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= (SELECT SYSTIMESTAMP FROM DUAL) 
AND DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= (SELECT SYSTIMESTAMP - INTERVAL '2' DAY FROM dual) 

mais ce n'est pas exactement ce que je veux, car il donne des lignes pas commencé à 12 heures, mais de temps en cours.

Je cherche un moyen de mélanger la date variable (chaque date de jour) et constante de temps (12 heures), ainsi que mes questions seront limitées à:

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= (today's date started at 12 am) 
AND DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= (yesterday's date started at 12 am 
+0

Copie possible de [Oracle: Comment puis-je sélectionner des enregistrements SEULEMENT d'hier?] (Http://stackoverflow.com/questions/1574565/oracle-how-can-i-select-records-only-from-hier) –

Répondre

3

Vous n'avez pas besoin des sous-requêtes d'accès les fonctions. Je pense que vous voulez juste trunc():

WHERE DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP <= trunc(SYSTIMESTAMP) AND 
     DAILY_OPEN_POSITIONS.OPEN_TIMESTAMP >= trunc(SYSTIMESTAMP - INTERVAL '2' DAY) 

Cependant, je pense qu'il devrait être jour « 1 » dans la deuxième condition.

+0

Oui, ça devrait être un jour. Mais, qu'en est-il du script à 00:01, l'intervalle -1 ne pointera pas sur le dernier jour. c'est la question principale, puis-je dire explicitement pour exécuter des requêtes à cette date a commencé à 00 et la date précédente a commencé à 00 – Sam

+0

Cela devrait fonctionner à 00h01 –

+0

mais cela donne les résultats d'hier à 00h01 à l'heure actuelle . Je veux que ce soit d'hier à 12:00 à aujourd'hui à 12:00. – Sam