web-dev-qa-db-ja.com

MySQLのDATETIMEフィールドから時間のみを更新する方法は?

何も変更せずに時間のみを変更するDateTime列を更新します。値がすべて異なるため、間隔の追加に使用できません。日付もたくさんあります。そのため、条件として正確な希望日の時間を変更する必要があります。

例:

*************************************************
**        Before       *|*         After       **
************************|************************
** 2017-07-24 19:06:15 *|* 2017-07-24 15:06:15 **
** 2017-07-24 17:12:23 *|* 2017-07-24 15:12:23 **
** 2017-07-24 23:00:03 *|* 2017-07-24 15:00:03 **
** 2017-07-24 20:33:56 *|* 2017-07-24 15:33:56 **
** 2017-07-24 18:19:31 *|* 2017-07-24 15:19:31 **
** 2017-07-24 16:43:47 *|* 2017-07-24 15:43:47 **
*************************************************

プログラミング言語を使用せずに、MySQLクエリのみで実行したい。

15
M.A.K. Ripon

[〜#〜] sql [〜#〜]

_UPDATE datetimes
SET datetime = DATE_ADD(datetime,
                        INTERVAL (15 - HOUR(datetime)) HOUR);
_

デモ

http://rextester.com/JOJWJ94999

説明

_DATE_ADD(datetime, INTERVAL_interval _HOUR)_加算または減算intervaldatetimeからの時間(intervalが正か負かによって異なります)。加算または減算する時間数は、datetimeHOUR(datetime)から検出)の時間数部分を15から減算することによって計算されます。現在の時刻が16:00以降の場合、これは負の数になり、現在の時間が15:00より前の場合は正の数になります。 WHERE句がないため、テーブル内のすべての行が更新されます。

12
Steve Chambers

DATE_FORMAT() 関数を使用して、時間を「ハードコード」できます。

_UPDATE some_table SET dt = DATE_FORMAT(dt, '%Y-%m-%d 15:%i:%s');
_

デモ: http://rextester.com/RJESF70894

準備されたステートメントのパラメーターとして時間をバインドしたい場合は、REPLACE()と組み合わせることができます。

_UPDATE some_table SET dt = DATE_FORMAT(dt, REPLACE('%Y-%m-%d %H:%i:%s', '%H', ?))
_

デモ: http://rextester.com/OHUKF73552

11
Paul Spiegel

MySQL DATETIME-日付のみを変更 のようになります。

UPDATE tabelname 
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s')) 
WHERE id = 123;

7は、このレコードの日時列に必要な新しい時間を表します

6
Ivo P

あなたは以下のクエリを使用できます、それがあなたを助けることを願っています:

UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');

このクエリでは15は、レコードの新しい時間を表します

4
Pradeep Rajput