Oracleにdatetime
列があります(MM/DD/YYYY HH:MM:SS AM/PM)が、これを行うと:
SELECT MAX(D_DTM)-1 FROM tbl1
...それは1日戻ります。 1日ではなく1時間を列から削除するにはどうすればよいですか?
また、午前12時のdatetime
レコードがMM/DD/YYYYのようになり、MM/DD/YYYY 00:00:ではないことに気付きました。それが重要かどうかはわかりません。
ランディの答え は良いですが、間隔を使用することもできます:
SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
はい-日付は整数日単位で進みます。
時間を必要とする場合は、-(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
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の使用がうまくいかない状況に役立つので、これを取り上げます。