2016-10-24 2 views
-1

日付を保持して時刻を変更することで、予定日の時刻を更新するクエリが必要です。 例:oracle sqlで時刻を更新するにはどうすればよいですか?

10-2月09 09:00:00 と私は2016年2月10日10:00:00に変更したいと思います。

Update Appointment 
set vdate = '10:00:00' 
where vdate= '10-Feb-2016' 

私は私が何かが欠けていた場合に確認してください。「0行が「を更新しました未取得。事前に 感謝。

+0

「vdate」の種類は何ですか? – Bharat

+0

タイプは日付です。 – Auxion

+1

'Date'のみそこで時間を更新できない場合は、' datetime'を使用する必要があります – Bharat

答えて

0

は次のように試してみてください。

UPDATE MyTable 
    SET MyDate = DATEADD(HOUR, 4, CAST(CAST(MyDate AS DATE) AS DATETIME)) 

または

UPDATE MyTable 
SET MyDate = DATEADD(HOUR, 4, CAST(FLOOR(CAST(MyDate AS FLOAT)) AS DATETIME)) 
+0

Oracleには' datetime'というデータ型はありません。あるいは、関数 'dateadd' –

3

trunc()を使用すると、の時刻部分を設定できます00:00:00から(またはTIMESTAMP)、それまで10時間を追加します。

Update Appointment 
    set vdate = trunc(vdate) + interval '10' hour 
where trunc(vdate) = DATE '2016-02-10' 

これは、日付2016-02-10を持つすべての行を変更します。あなたが唯一の09:00あるもののために(分と秒を無視して)ことを行いたい場合は、単にそれらの行に

Update Appointment 
    set vdate = trunc(vdate) + interval '1' hour 
where trunc(vdate, 'hh24') = timestamp '2016-02-10 09:00:00' 

trunc(vdate, 'hh24')を1時間を追加00:00date値の分、秒を設定します、2016-02-10 09:00:00との比較が正しく機能します。


関連のない、しかし:は、暗黙的なデータ型変換に依存しないでください。 '10-Feb-2016'は文字列値であり、DATEリテラルではありません。日付を指定するには、上記のようにANSI DATEリテラルを使用するか、to_date()関数を使用して文字列リテラルを適切な日付値に変換します。

あなたの文は邪悪な暗黙的なデータ型変換の対象となるとの文を実行しているSQLクライアントが異なるNLSの設定を使用している場合は失敗します(それは例えば私のコンピュータ上で失敗します)

0

あなたが何をしたい場合には、そして、あなたが行うことができ、これまでの時間を追加されます。

Update Appointment 
set vdate = vdate + 1/24 
where vdate = to_date('10/02/2016 09:00', 'dd/mm/yyyy hh24:mi'); 

オラクルであるため、日付の違いは、日数で測定され、時間はその日の1/24であるされています。

あなたは正確な時刻を指定されて何をしたいのか(例えば10時25分48秒まで)、その後、あなたの代わりに次の操作を行うことができれば:これらの更新プログラムは、すべての行を更新することを念頭に置いて

Update Appointment 
set vdate = trunc(vdate) + 10/24 + 25/(24*60) + 48/(24*60*60) 
where vdate = to_date('10/02/2016 09:00', 'dd/mm/yyyy hh24:mi'); 

ベアを2016年2月10日の午前9時の日付です。より具体的な行または行のセットを指定する場合は、クエリのwhere句を変更する必要があります。

関連する問題