質問

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
UPDATE "TABLE" 
SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute 
WHERE (...)

interval は次のいずれかです

  • Year
  • DAY
  • 時間
  • SECOND

フィールドのデータ型が日付またはタイムスタンプの場合、日数で指定された正しい数値(または、場合によっては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;

単に、これをさまざまな日付形式で使用できます。...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top