2014-09-06 6 views
1

Я в настоящее время храню все поля DATETIME в моей базе данных в США по восточному времени и хотел бы UPDATE их всех в UTC. У меня много полей DATETIME во множестве разных таблиц. Есть ли способ идентифицировать и сразу UPDATE?Обновить все поля DATETIME в базе данных

+1

Вы можете создать эти запросы по запросу в таблице [INFORMATION_SCHEMA COLUMNS] (https://dev.mysql.com/doc/refman/5.6/en/columns-table.html). – VMai

+0

Комментарий от @VMai верен, с [21.4 Таблица COLORNS INFORMATION_SCHEMA] (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 Syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html) - (Хранимая процедура), подумайте, что вы может достичь того, что вам нужно. – wchiquito

ответ

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 по вашему выбору и выполните их. Конечно, можно создать подготовленные заявления для результатов и выполнить их.

Смежные вопросы