2014-09-06 2 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 The 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

답변

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'; 

결과를 내 데이터베이스 '테스트 4'에 대한 : 1 회 작업에 대한

update_statement 
----------------------------------------------------------------------- 
UPDATE `example12` SET `column_name` = `column_name` + INTERVAL 5 HOUR; 
UPDATE `post` SET `expiration` = `expiration` + INTERVAL 5 HOUR; 

을 단순히 것 결과를 원하는 MySQL 클라이언트로 복사하고 실행하십시오. 물론 결과에 대한 준비된 명령문을 작성하고 실행하는 것이 가능합니다.

관련 문제