我试着从Oracle中减去日期,所以它甚至影响一天。例如,如果时间戳是2015年6月1日00小时,如果我减去2小时,我希望能够到2014年5月31日22小时。
我试着
to_char(sysdate-(2/11), 'MM-DD-YYYY HH24')
但它只减去小时;
其他人评论说(不正确地)使用2/11
来指定所需的间隔。
我个人更喜欢用ANSI interval
字面值写这样的东西,这使得读取查询更容易:
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
输出为:06-10-2015 22:00,即前一天
sysdate - (2/11)
一天由24 hours
组成。因此,要从一天中减去2 hours
,您需要将其除以24
:
DATE_value - 2/24
使用interval
:
DATE_value - interval '2' hour
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