2017-09-05 5 views
0

私の日付の列を更新したい、35秒を追加する必要があります。ここでオラクル、SQLの日付機能

UPDATE temp_table SET dpdate = dpdate + 35/86400 ; 

問題です:私はこのクエリを使用し

EXISTING    AFTER Update 
-------------------- -------------------- 
02-JUN-2017 02:06:13 02-JUN-2017 02:06:48 
02-JUN-2017 02:06:14 02-JUN-2017 02:06:49 
19-MAY-2017 02:05:47 19-MAY-2017 02:05:22 

注:私は上記のクエリを実行し、以下のすべての結果は、更新クエリを実行した後です。

最初の2行では正常に機能しましたが、最後の行では02:06:22になるはずですが、02:05:22です。

私は日付で注文すると、19-MAY-2017 02:05:47が最初に来てから19-MAY-2017 02:05:22になります。

分フィールドが増分されず、どのように順番に、19-MAY-2017 02:05:47が最初に来るのか分かりません。

A 01-DEC-2014 12:12:00 
C 01-DEC-2014 12:12:35 

A 01-JUL-2016 05:07:33 
C 01-JUL-2016 05:07:08 

A 29-JAN-2016 04:01:08 
C 29-JAN-2016 04:01:43 

A 26-FEB-2016 04:02:09 
C 26-FEB-2016 04:02:44 

A 11-MAR-2016 03:03:13 
C 11-MAR-2016 03:03:48 

A 08-APR-2016 04:04:35 
C 08-APR-2016 04:04:10 

私の質問:最初の4つは正しいですが、あなたは最後の2の問題を見ることができる、ことによりオーダーの

いくつかの例は、なぜ分のフィールドが更新されませんか?

答えて

0

操作は正常ですか?どちらか(to_char(dpdate, 'dd-MON-yyyy hh24mmss')を日付を表示することを、またはあなたのNLS_DATE_FORMATパラメータがその形式で変更されました:

select current_date,current_date + 35/86400 from dual 
4

私の賭けは、あなたが使用している次のとおりです。

チェックこのクエリは、それは分が変更され、作業の罰金ですマスク) - 時間セクションのmmに注意してください。月を取得するにはmmが使用されますが、分を取得するにはおそらくmiが必要です。

例えば:

WITH sample_data AS (SELECT to_date('02-JUN-2017 02:06:13', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual UNION ALL 
        SELECT to_date('02-JUN-2017 02:06:14', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual UNION ALL 
        SELECT to_date('19-MAY-2017 02:05:47', 'dd-MON-yyyy hh24:mi:ss') dpdate FROM dual) 
SELECT to_char(dpdate, 'dd/mm/yyyy hh24:mi:ss') dpdate, 
     to_char(dpdate + 35/(24*60*60), 'dd/mm/yyyy hh24:mm:ss') incorrect_new_dpdate_display, 
     to_char(dpdate + 35/(24*60*60), 'dd/mm/yyyy hh24:mi:ss') correct_new_dpdate_display 
FROM sample_data; 

DPDATE    INCORRECT_NEW_DPDATE_DISPLAY CORRECT_NEW_DPDATE_DISPLAY 
------------------- ---------------------------- -------------------------- 
02/06/2017 02:06:13 02/06/2017 02:06:48   02/06/2017 02:06:48 
02/06/2017 02:06:14 02/06/2017 02:06:49   02/06/2017 02:06:49 
19/05/2017 02:05:47 19/05/2017 02:05:22   19/05/2017 02:06:22 
+0

ありがとうございます、これは機能します! :)私はMIの代わりにMMを使用していました。 – jaya

0

あなたは、これが正常に動作し、同様に分を更新しOracle 11gINTERVAL

UPDATE temp_table SET dpdate = dpdate + INTERVAL '35' SECOND; 

を使用することができます。また、算術式と比べて読みやすくなります。