从日期时间减去一小时而不是一天

时间:2013-04-18 13:35:29

标签: oracle datetime plsql date-arithmetic

我在Oracle中有一个datetime列( MM / DD / YYYY HH:MM:SS AM / PM )但是当我这样做时:

SELECT MAX(D_DTM)-1 FROM tbl1

......它可以追溯到一天。如何从列中删除一小时而不是一天?

我也注意到12AM的datetime条记录看起来像 MM / DD / YYYY 而不是 MM / DD / YYYY 00:00:00 ;我不确定这是否重要。

6 个答案:

答案 0 :(得分:16)

Randy's answer很好,但您也可以使用间隔:

SELECT MAX(D_DTM)- interval '1' hour FROM tbl1

答案 1 :(得分:6)

是 - 日期按整数天计算。

如果你需要几个小时,你需要做一些数学运算 - 比如-(1/24)

答案 2 :(得分:6)

或使用INTERVAL功能。它有相同的结果,但我认为它读得更清楚 - 这当然只是一种观点:)

SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1

关于INTERVAL函数的好处是你可以在处理DATE值时使间隔为年,月,日,小时,分钟或秒,尽管月间隔可以是在处理月末日期时很棘手。

是的,示例中1附近的引用是必需的。

您还可以使用特定于Oracle的NumToDSInterval函数,该函数不太标准但更灵活,因为它接受变量而不是常量:

SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1

答案 3 :(得分:5)

select sysdate - numtodsinterval(1,'hour') from dual

答案 4 :(得分:3)

简单。

sysdate - 5 /(24 * 60 * 60) - >从systime中减去5秒

sysdate - 5 /(24 * 60) - >从systime减去5分钟

sysdate - 5 /(24) - >从systime减去5小时

因此

从双

中选择(sysdate - (1/24))

答案 5 :(得分:2)

使用间隔的另一种方法是

NUMTODSINTERVAL( number, expression )

实施例

NUMTODSINTERVAL(150, 'DAY')
NUMTODSINTERVAL(1500, 'HOUR')
NUMTODSINTERVAL(15000, 'MINUTE')
NUMTODSINTERVAL(150000, 'SECOND')

我提出这个问题是因为它对于使用INTERVAL不起作用的情况很有用。