Oracle:タイムスタンプに分を追加する方法は?
-
05-07-2019 - |
質問
Oracle日付列の値に30分を追加する必要があります。 SELECTステートメントで
を指定してこれを行います to_char(date_and_time +(.000694 * 31)
これはほとんどの場合正常に動作します。しかし、時間がAM / PMの境界にあるときではありません。たとえば、 12:30
[PM]に30分を追加すると、 1:00
(AM)が返されます。私が期待する答えは 13:00
です。これを行う正しい方法は何ですか?
解決
その他の回答はすべて基本的に正しいですが、元の質問に直接回答した人はいないと思います。
" date_and_time"と仮定するあなたの例では、タイプDATEまたはTIMESTAMPの列です。これを変更する必要があると思います:
to_char(date_and_time + (.000694 * 31))
これ:
to_char(date_and_time + (.000694 * 31), 'DD-MON-YYYY HH24:MI')
デフォルトの日付形式では" HH"を使用しているようです「HH24」ではなく、時間のコード。
また、あなたの定数は混乱を招き、不正確だと思います。あなたがしたことは、(。000694)が1分の値であると計算し、追加したい分数(例では31、テキストでは30と言ったが)に掛けていることだと思う。
また、1日から始めて、コード内で必要な単位に分割します。この場合、(1/48)は30分です。または、わかりやすくするために分割したい場合は、((1/24)*(1/2))と書くことができます。
これにより、丸めエラーが回避され(ここでは意味がないはずの浮動小数点に固有のものを除く)、少なくとも私にとっては明確になります。
他のヒント
日付に日数を追加できることに加えて、 Oracle 9i
以降を使用していると仮定して間隔データ型を使用できます。 p>
SQL> ed
Wrote file afiedt.buf
SELECT sysdate, sysdate + interval '30' minute FROM dual
SQL> /
SYSDATE SYSDATE+INTERVAL'30'
-------------------- --------------------
02-NOV-2008 16:21:40 02-NOV-2008 16:51:40
SQL> select sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 from dual;
SYSDATE SYSDATE+1/24 SYSDATE+1/1440 SYSDATE+1/86400
-------------------- -------------------- -------------------- --------------------
03-Jul-2002 08:32:12 03-Jul-2002 09:32:12 03-Jul-2002 08:33:12 03-Jul-2002 08:32:13
UPDATE "TABLE"
SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute
WHERE (...)
interval
は次のいずれかです
- Year
- 月
- DAY
- 時間
- 分
- SECOND
このために interval
リテラルを使用することをお勧めします。次に 30 /(24 * 60)
または 5 /(24 * 60 * 69)
e.g。
-
some_date + interval '2' hour
-
some_date + interval '30' minutes
-
some_date + interval '5' second
-
some_date + interval '2' day
複数のユニットを1つの式に結合することもできます:
-
some_date + interval '2 3:06' day to minute
日付値に2日、3時間6分を追加します
上記も標準SQLであり、他のいくつかのDBMSでも機能します。
マニュアルの詳細: https://docs.oracle。 com / database / 121 / SQLRF / sql_elements003.htm#SQLRF00221
フィールドのデータ型が日付またはタイムスタンプの場合、日数で指定された正しい数値(または、場合によっては1日の正しい端数)を追加すると、Oracleは常に正しい結果を返します。したがって、30分で値を上げようとしている場合は、次を使用する必要があります。
select field + 0.5/24 from table;
あなたが提供した情報に基づいて、私はこれがあなたがやろうとしたことであると信じており、それがうまくいくと確信しています。
これを使用できませんか
SELECT date_and_time + INTERVAL '20:00' MINUTE TO SECOND FROM dual;
このドメインは初めてです。
開始時刻がPMであることをOracleが理解していることを確認し、最終出力のHH24形式マスクを指定します。
SELECT to_char((to_date('12:40 PM', 'HH:MI AM') + (1/24/60) * 30), 'HH24:MI') as time
FROM dual
TIME
---------
13:10
注:HH:MIの 'AM'
は、AM / PM子午線インジケーターの単なるプレースホルダーです。 'PM'
求めていることに基づいて、to_charのHH24:MI形式が必要になります。
Oracleで日付を編集するには、試してください
select to_char(<columnName> + 5 / 24 + 30 / (24 * 60),
'DD/MM/RRRR hh:mi AM') AS <logicalName> from <tableName>
とても簡単です
iはシステム日付に10分を追加し、常にカスタムではなくDbサーバー機能を使用します。
select to_char(sysdate + NUMTODSINTERVAL(10,'MINUTE'),'DD/MM/YYYY HH24:MI:SS') from dual;
SELECT to_char(sysdate + (1/24/60) * 30, 'dd/mm/yy HH24:MI am') from dual;
単に、これをさまざまな日付形式で使用できます。...