我在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 ;我不确定这是否重要。
答案 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不起作用的情况很有用。