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會識別時間部分 - 即使它是零 - 也可能幾乎所有其他語言都會。 –