web-dev-qa-db-ja.com

1日ではなく日時から1時間を引く

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:ではないことに気付きました。それが重要かどうかはわかりません。

9
lightweight

ランディの答え は良いですが、間隔を使用することもできます:

SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
17
A.B.Cade

はい-日付は整数日単位で進みます。

時間を必要とする場合は、-(1/24)のようにいくつかの計算を行う必要があります

6
Randy

または、INTERVAL関数を使用します。それは同じ結果をもたらしますが、私はそれがより明確に読めると思います-それはもちろん単なる意見です:)

SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1

INTERVAL関数の良いところは、DATE値を処理するときに、間隔を年、月、日、時間、分、または秒にすることができることです。ただし、月の間隔は注意が必要です。月末の日付を処理する場合。

はい、例の1を引用符で囲む必要があります。

Oracle固有のNumToDSInterval関数を使用することもできます。これは、標準ではありませんが、定数の代わりに変数を受け入れるため、より柔軟性があります。

SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1
6
Ed Gibbs
select sysdate - numtodsinterval(1,'hour') from dual
5
sakumar

簡単です。

sysdate-5 /(24 * 60 * 60)-> systimeから5秒を減算します

sysdate-5 /(24 * 60)-> systimeから5分を減算します

sysdate-5 /(24)-> systimeから5時間を減算します

したがって、

デュアルから(sysdate-(1/24))を選択します

3
Ankit Kachchhi

間隔を使用する別の方法は

NUMTODSINTERVAL( number, expression )

NUMTODSINTERVAL(150, 'DAY')
NUMTODSINTERVAL(1500, 'HOUR')
NUMTODSINTERVAL(15000, 'MINUTE')
NUMTODSINTERVAL(150000, 'SECOND')

INTERVALの使用がうまくいかない状況に役立つので、これを取り上げます。

2
Joe W