如何从Oracle中的日期中减去小时数,这样也会影响日期

问题描述 投票:18回答:5

我正在尝试从Oracle中减去日期,因此它甚至也会影响日期。例如,如果时间戳记为01 / June / 2015 00小时,如果我减去2小时,我希望能够转到2014年5月31日22小时。

我尝试过

to_char(sysdate-(2/11), 'MM-DD-YYYY HH24')

但是它只减去小时;它不会碰到当天本身。

sql oracle date-arithmetic
5个回答
44
投票

其他人评论了2/11的使用(不正确)以指定所需的间隔。

但是我个人更喜欢使用ANSI interval文字编写类似的内容,这使得reading查询更加容易:

sysdate - interval '2' hour

它还具有可移植的优点,许多DBMS支持此功能。另外,我不必启动计算器就可以知道表达式意味着多少小时-我对心理算术非常不满意;)


4
投票

尝试一下:

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。


4
投票

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>

1
投票

date - n将减去给定日期的n天。为了减去小时数,您需要将其转换为日间购买除以24。在您的情况下,应为to_char(sysdate - (2 + 2/24), 'MM-DD-YYYY HH24')。这将从sysdate开始2天2个小时。


0
投票

您应将小时数除以24而不是11像这样:select to_char(sysdate - 2/24, 'dd-mon-yyyy HH24') from dual

© www.soinside.com 2019 - 2024. All rights reserved.