10

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

SELECT MAX(D_DTM)-1 FROM tbl1

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

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

4

6 回答 6

18

兰迪的回答很好,但你也可以使用间隔:

SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
于 2013-04-18T13:49:33.513 回答
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
于 2013-04-18T13:49:44.317 回答
6

是 - 日期按整数天计算。

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

于 2013-04-18T13:36:45.103 回答
5
select sysdate - numtodsinterval(1,'hour') from dual
于 2015-07-01T14:12:15.190 回答
4

这很简单。

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

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

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

因此

从双重选择(sysdate -(1/24))

于 2016-12-22T01:11:08.023 回答
2

另一种使用间隔的方法是

NUMTODSINTERVAL( number, expression )

例子

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

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

于 2014-04-03T17:17:02.060 回答