1
我目前在美國東部時間將所有DATETIME
字段存儲在我的數據庫中,並且想要將它們全部存儲爲UTC。我在很多不同的表中有很多DATETIME
字段。有沒有一種方法可以一次識別並全部識別它們?更新數據庫中的所有DATETIME字段
我目前在美國東部時間將所有DATETIME
字段存儲在我的數據庫中,並且想要將它們全部存儲爲UTC。我在很多不同的表中有很多DATETIME
字段。有沒有一種方法可以一次識別並全部識別它們?更新數據庫中的所有DATETIME字段
您可以生成你需要用下面的語句的UPDATE語句:
SET @tzdiff = 5; -- difference between EST and UTC
SET @db = 'test4'; -- your DB name
SELECT
CONCAT(
'UPDATE ',
'`', c.TABLE_NAME, '` ',
'SET ',
'`', COLUMN_NAME, '` = ',
'`', COLUMN_NAME, '` + INTERVAL ', @tzdiff, ' HOUR;'
) as update_statement
FROM
INFORMATION_SCHEMA.COLUMNS c
WHERE
c.TABLE_SCHEMA = @db
AND
c.`DATA_TYPE` LIKE 'datetime';
結果對我的數據庫「TEST4」:
update_statement
-----------------------------------------------------------------------
UPDATE `example12` SET `column_name` = `column_name` + INTERVAL 5 HOUR;
UPDATE `post` SET `expiration` = `expiration` + INTERVAL 5 HOUR;
對於一次性的工作,我只想將結果複製到您選擇的MySQL客戶端並執行它們。當然,可以爲結果創建預處理語句並執行它們。
您可以通過[INFORMATION_SCHEMA COLUMNS](https://dev.mysql.com/doc/refman/5.6/en/columns-table.html)表上的查詢構建這些查詢。 – VMai 2014-09-06 15:07:39
來自@VMai的評論是正確的,[21.4 INFORMATION_SCHEMA COLUMNS表](http://dev.mysql.com/doc/refman/5.6/en/columns-table.html),[13.6.6遊標]( http://dev.mysql.com/doc/refman/5.6/en/cursors.html)和[13.5.1 PREPARE語法](http://dev.mysql.com/doc/refman/5.6/en/prepare .html),全部在[13.1.15 CREATE PROCEDURE和CREATE FUNCTION語法](http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html) - (存儲過程)中,想想你可以實現你所需要的。 – wchiquito 2014-09-06 15:40:16