何も変更せずに時間のみを変更する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クエリのみで実行したい。
[〜#〜] 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が正か負かによって異なります)。加算または減算する時間数は、datetime
(HOUR(datetime)
から検出)の時間数部分を15から減算することによって計算されます。現在の時刻が16:00以降の場合、これは負の数になり、現在の時間が15:00より前の場合は正の数になります。 WHERE
句がないため、テーブル内のすべての行が更新されます。
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', ?))
_
MySQL DATETIME-日付のみを変更 のようになります。
UPDATE tabelname
SET colname = CONCAT(DATE(colname), ' ', 7, DATE_FORMAT(colname, ':%i:%s'))
WHERE id = 123;
7は、このレコードの日時列に必要な新しい時間を表します
あなたは以下のクエリを使用できます、それがあなたを助けることを願っています:
UPDATE tablename SET colname = DATE_FORMAT(STR_TO_DATE(colname, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d 15:%i:%s');
このクエリでは15は、レコードの新しい時間を表します