我在 Oracle ( MM/DD/YYYY HH:MM:SS AM/PMdatetime
) 中有一个列,但是当我这样做时:
SELECT MAX(D_DTM)-1 FROM tbl1
......它可以追溯到一天。如何从列中删除一小时而不是一天?
我还注意到datetime
12AM 的记录看起来像MM/DD/YYYY而不是MM/DD/YYYY 00:00:00;我不确定这是否重要。
我在 Oracle ( MM/DD/YYYY HH:MM:SS AM/PMdatetime
) 中有一个列,但是当我这样做时:
SELECT MAX(D_DTM)-1 FROM tbl1
......它可以追溯到一天。如何从列中删除一小时而不是一天?
我还注意到datetime
12AM 的记录看起来像MM/DD/YYYY而不是MM/DD/YYYY 00:00:00;我不确定这是否重要。
兰迪的回答很好,但你也可以使用间隔:
SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
或使用该INTERVAL
功能。它具有相同的结果,但我认为它读起来更清楚 - 这当然只是一种意见:)
SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1
该INTERVAL
函数的好处是,您可以在处理DATE
值时将间隔设置为年、月、日、小时、分钟或秒,尽管在处理月末日期时月间隔可能会很棘手。
是的,示例中的引号1
是必需的。
您还可以使用 Oracle 特定的NumToDSInterval
函数,它不那么标准但更灵活,因为它接受变量而不是常量:
SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1
是 - 日期按整数天计算。
如果你想要几个小时,你需要做一些数学 - 比如-(1/24)
select sysdate - numtodsinterval(1,'hour') from dual
这很简单。
sysdate - 5/(24*60*60) --> 从 systime 中减去 5 秒
sysdate - 5/(24*60) --> 从 systime 中减去 5 分钟
sysdate - 5/(24) --> 从 systime 中减去 5 小时
因此
从双重选择(sysdate -(1/24))
另一种使用间隔的方法是
NUMTODSINTERVAL( number, expression )
例子
NUMTODSINTERVAL(150, 'DAY')
NUMTODSINTERVAL(1500, 'HOUR')
NUMTODSINTERVAL(15000, 'MINUTE')
NUMTODSINTERVAL(150000, 'SECOND')
我提出这个是因为它对于使用 INTERVAL 不起作用的情况很有用。