我正在尝试从Oracle中减去日期,因此它甚至也会影响日期。例如,如果时间戳记为01 / June / 2015 00小时,如果我减去2小时,我希望能够转到2014年5月31日22小时。
我尝试过
to_char(sysdate-(2/11), 'MM-DD-YYYY HH24')
但是它只减去小时;它不会碰到当天本身。
其他人评论了2/11
的使用(不正确)以指定所需的间隔。
但是我个人更喜欢使用ANSI interval
文字编写类似的内容,这使得reading查询更加容易:
sysdate - interval '2' hour
它还具有可移植的优点,许多DBMS支持此功能。另外,我不必启动计算器就可以知道表达式意味着多少小时-我对心理算术非常不满意;)
尝试一下:
SELECT to_char(sysdate - (2 / 24), 'MM-DD-YYYY HH24') FROM DUAL
使用新的日期实例对其进行测试:
SELECT to_char(TO_DATE('11/06/2015 00:00','dd/mm/yyyy HH24:MI') - (2 / 24), 'MM-DD-YYYY HH24:MI') FROM DUAL
输出结果是:前一天是2015年6月10日22:00。
sysdate-(2/11)
要从日期中减去小时,您需要在天中转换小时。一天由24 hours
组成,因此要将2 hours
转换为天数,您需要将其除以24
。
现在,从日期中减去2个小时,请执行:
DATE_value - 2/24
例如,
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
将减去给定日期的n天。为了减去小时数,您需要将其转换为日间购买除以24。在您的情况下,应为to_char(sysdate - (2 + 2/24), 'MM-DD-YYYY HH24')
。这将从sysdate开始2天2个小时。
您应将小时数除以24而不是11像这样:select to_char(sysdate - 2/24, 'dd-mon-yyyy HH24') from dual