J'essaie de soustraire la date d'Oracle pour que cela affecte également la journée. Par exemple, si l'horodatage est 01/juin/2015 00 heures et si je soustrais 2 heures, je veux pouvoir aller au 31/mai/2014 22 heures.
J'ai essayé
to_char(sysdate-(2/11), 'MM-DD-YYYY HH24')
mais cela ne fait que soustraire l'heure; il ne touche pas le jour lui-même.
D'autres ont commenté l'utilisation (incorrecte) de 2/11
pour spécifier l'intervalle souhaité.
Personnellement, je préfère cependant écrire des choses comme ça en utilisant les littéraux ANSI interval
ce qui rend lecture la requête beaucoup plus facile:
sysdate - interval '2' hour
Il a également l'avantage d'être portable, de nombreux SGBD le supportent. De plus, je n'ai pas à allumer une calculatrice pour savoir combien d'heures l'expression signifie - je suis assez mauvais avec l'arithmétique mentale;)
Essaye ça:
SELECT to_char(sysdate - (2 / 24), 'MM-DD-YYYY HH24') FROM DUAL
Pour le tester à l'aide d'une nouvelle instance de date:
SELECT to_char(TO_DATE('11/06/2015 00:00','dd/mm/yyyy HH24:MI') - (2 / 24), 'MM-DD-YYYY HH24:MI') FROM DUAL
La sortie est: 06-10-2015 22:00, qui est la veille.
sysdate2/11)
Pour soustraire --- (heures d'une [[# #]] date [~ # ~], vous devez convertir les heures en jours. Un jour se compose de 24 hours
, donc pour convertir 2 hours
en jours, vous devez le diviser par 24
.
Maintenant, pour soustraire 2 heures de la date, procédez comme suit:
DATE_value - 2/24
Par exemple,
SQL> SELECT TO_CHAR(
2 TO_DATE('01/Jun/2015 00:00:00', 'DD/Mon/YYYY HH24:MI:SS') - 2/24,
3 'DD/Mon/YYYY HH24:MI:SS') dt
4 FROM DUAL;
DT
--------------------
31/May/2015 22:00:00
SQL>
date - n
Soustraira n jours de la date indiquée. Afin de soustraire les heures, vous devez le convertir en day buy en le divisant par 24. Dans votre cas, il devrait être to_char(sysdate - (2 + 2/24), 'MM-DD-YYYY HH24')
. Cela soustraire 2 jours et 2 heures de sysdate.