44

Oracle の日付列の値に 30 分を追加する必要があります。これを SELECT ステートメントで次のように指定して行います。

to_char(date_and_time + (.000694 * 31)

ほとんどの場合、これで問題なく動作します。ただし、時刻が AM/PM 境界にある場合は除きます。たとえば、12:30[which is PM] に30 分を追加すると、 1:00which is AM が返されます。私が期待する答えは です13:00。これを行う正しい方法は何ですか?

4

13 に答える 13

138

日付に日数を追加できることに加えて、現在Oracle 9iまたはそれ以降であることを前提として間隔データ型を使用できます。これにより、多少読みやすくなります。

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
于 2008-11-02T21:22:38.887 に答える
30

他のすべての答えは基本的に正しいですが、元の質問に直接答えた人はいないと思います。

あなたの例の「date_and_time」がDATEまたはTIMESTAMP型の列であると仮定すると、これを変更するだけでよいと思います:

to_char(date_and_time + (.000694 * 31))

これに:

to_char(date_and_time + (.000694 * 31), 'DD-MON-YYYY HH24:MI')

デフォルトの日付形式は、「HH24」ではなく「HH」コードを使用しているようです。

また、あなたの定数用語は紛らわしく、不正確だと思います。あなたがしたことは、(.000694) が約 1 分の値であると計算し、追加する分数 (この例では 31 ですが、テキストでは 30 と言いました) を掛けていると思います。

また、1 日から始めて、コード内で必要な単位に分割します。この場合、(1/48) は 30 分になります。または、わかりやすくするために分割したい場合は、 ( (1/24) * (1/2) ) と書くことができます。

これにより、丸めエラーが回避され(ここでは意味のない浮動小数点に固有のものを除く)、少なくとも私にとってはより明確になります。

于 2008-11-03T12:59:46.220 に答える
18
UPDATE "TABLE" 
SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute 
WHERE (...)

intervalの1つはどこですか

  • 時間
  • 2番目
于 2013-06-11T08:22:50.590 に答える
12

http://www.orafaq.com/faq/how_does_one_add_a_day_hour_minute_second_to_a_date_valueから

SYSDATE 疑似列は、現在のシステムの日付と時刻を示します。SYSDATE に 1 を追加すると、日付が 1 日進みます。分数を使用して、日付に時間、分、または秒を追加します

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
于 2010-02-22T13:14:26.290 に答える
12

orはorよりもはるかに読みやすいintervalため、これにはリテラルを使用することをお勧めしますinterval '30' minuteinterval '5' second30 / (24 * 60)5 / (24 * 60 * 69)

例えば

  • some_date + interval '2' hour
  • some_date + interval '30' minute
  • 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

于 2016-11-07T07:22:15.413 に答える
3

これは使えないかな

SELECT date_and_time + INTERVAL '20:00' MINUTE TO SECOND FROM dual;

私はこのドメインに不慣れです。

于 2010-12-01T21:31:12.160 に答える
3

フィールドのデータ型が日付またはタイムスタンプの場合、日数で指定された正しい数値 (または、この場合は 1 日の正しい端数) を追加すると、Oracle は常に正しい結果を返すはずです。したがって、30 分で値を上げようとしている場合は、次を使用する必要があります。

select field + 0.5/24 from table;

あなたが提供した情報に基づいて、これはあなたがやろうとしたことであり、うまくいくと確信しています.

于 2008-11-02T20:48:55.133 に答える
1

開始時刻が 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

注: 'AM'HH:MI の は、午前/午後の子午線インジケータの単なるプレースホルダーです。また可能性があります'PM'

于 2008-11-02T20:47:57.443 に答える
1

とても簡単に

私はシステム日付に10分を追加し、常に優先的にカスタム関数ではなくDBサーバー関数を使用しました。

select to_char(sysdate + NUMTODSINTERVAL(10,'MINUTE'),'DD/MM/YYYY HH24:MI:SS') from dual;
于 2018-12-16T21:39:01.703 に答える
0

求めているものに基づいて、to_charのHH24:MI形式が必要です。

于 2008-11-03T00:46:50.410 に答える
0

Oracleで日付を編集するには、試すことができます

  select to_char(<columnName> + 5 / 24 + 30 / (24 * 60),
           'DD/MM/RRRR hh:mi AM') AS <logicalName> from <tableName>
于 2015-11-07T06:56:13.257 に答える