1小时我在甲骨文datetime
柱(MM/DD/YYYY HH:MM:SS AM/PM),但是当我这样做:减去日期时间,而超过一天
SELECT MAX(D_DTM)-1 FROM tbl1
。它回来了一天。我如何从列中删除一个小时而不是一天?
我也注意到,datetime
记录12AM样子MM/DD/YYYY而不是MM/DD/YYYY 00:00:00;我不确定这是否重要。
1小时我在甲骨文datetime
柱(MM/DD/YYYY HH:MM:SS AM/PM),但是当我这样做:减去日期时间,而超过一天
SELECT MAX(D_DTM)-1 FROM tbl1
。它回来了一天。我如何从列中删除一个小时而不是一天?
我也注意到,datetime
记录12AM样子MM/DD/YYYY而不是MM/DD/YYYY 00:00:00;我不确定这是否重要。
Randy's answer是好的,但你也可以使用间隔:
SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
更好的答案国际海事组织,更清楚为未来的编码人员知道最新情况 – user2061886
是 - 日期以整数天为单位。
如果你想要小时,你需要做一些数学 - 像-(1/24)
或者使用INTERVAL
功能。它具有相同的结果,但我认为它会读取更清晰 - 这当然只是一个意见:)
SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1
有关INTERVAL
功能的好处是,你可以做的时间间隔是年,月,日,小时,处理DATE
值时需要几分钟或几秒钟,但在处理月末日期时,月份间隔可能会非常棘手。
是的,在这个例子中围绕1
的引用是必需的。
您还可以使用Oracle特有NumToDSInterval
功能,这是不太标准,但更灵活,因为它接受变量,而不是常量:
SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1
使用间隔的另一种方法是
NUMTODSINTERVAL(number, expression)
示例
NUMTODSINTERVAL(150, 'DAY')
NUMTODSINTERVAL(1500, 'HOUR')
NUMTODSINTERVAL(15000, 'MINUTE')
NUMTODSINTERVAL(150000, 'SECOND')
我把这个提起来beca使用它对于使用INTERVAL无法工作的情况非常有用。
select sysdate - numtodsinterval(1,'hour') from dual
它很简单。
SYSDATE - 5 /(24 * 60 * 60) - >减去5秒内从SYSTIME
SYSDATE - 5 /(24 * 60) - >从SYSTIME
SYSDATE减去5分钟 - 5 /(24) - >减去SYSTIME
5小时因此
选择(SYSDATE - (1/24))从双
你可以扩大一点你的答案,如为什么你使用除法? –
@CodyGuldner该部门正在计算价值的一小部分天数。 (1小时是一天的1/24,所以5/24天是5小时。)减去然后减去一天。但是,就我个人而言,我会担心浮点错误。 – jpmc26
@ jpmc26想法是这样的信息应该包含在答案中。 –
你如何观看12AM值?它是通过SQLPlus还是前端语言(C#,PHP等等)? –
使用蟾蜍,是前端的问题?我是新的Oracle env – user2061886
它可能是一个TOAD的东西,但我不熟悉TOAD。如果列中的所有其他日期显示时间分量,而“午夜”日期则不显示,我认为可以安全地假设“午夜”真的在那里,而TOAD只是“有用地”隐藏它。可能有一个设置可以打开或关闭此功能,但这只是一个猜测。我知道.NET语言和PHP会识别时间部分 - 即使它是零 - 也可能几乎所有其他语言都会。 –