2014-09-06 58 views
1

我目前在美國東部時間將所有DATETIME字段存儲在我的數據庫中,並且想要將它們全部存儲爲UTC。我在很多不同的表中有很多DATETIME字段。有沒有一種方法可以一次識別並全部識別它們?更新數據庫中的所有DATETIME字段

+1

您可以通過[INFORMATION_SCHEMA COLUMNS](https://dev.mysql.com/doc/refman/5.6/en/columns-table.html)表上的查詢構建這些查詢。 – VMai 2014-09-06 15:07:39

+0

來自@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

回答

1

您可以生成你需要用下面的語句的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客戶端並執行它們。當然,可以爲結果創建預處理語句並執行它們。

相關問題