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

lig*_*ght 9 oracle datetime plsql date-arithmetic

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

SELECT MAX(D_DTM)-1 FROM tbl1
Run Code Online (Sandbox Code Playgroud)

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

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

A.B*_*ade 17

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

SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
Run Code Online (Sandbox Code Playgroud)


Ran*_*ndy 6

是 - 日期按整数天计算.

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


Ed *_*bbs 6

或者使用该INTERVAL功能.它有相同的结果,但我认为它读得更清楚 - 这当然只是一个意见:)

SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1
Run Code Online (Sandbox Code Playgroud)

关于该INTERVAL函数的好处是,您可以在处理DATE值时将间隔设置为年,月,日,小时,分钟或秒,但在处理月末日期时,月间隔可能会很棘手.

是的,1示例中的引用是必需的.

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

SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1
Run Code Online (Sandbox Code Playgroud)


sak*_*mar 5

select sysdate - numtodsinterval(1,'hour') from dual
Run Code Online (Sandbox Code Playgroud)