Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add an offset to all timestamps/DATETIME in a MySQL database?

I have some MySQL databases that have several tables that contain (amongst others) some DATETIME columns. I am searching for a way to add some amount of time (say one year) to all DATETIME columns in the whole database.

This can be useful if the system-time was wrong when the data was originally written to the database.

OR, as in my case

to create recent DEMO-data for an application out of historical data.

  • Is there a way to shift all DATETIME fields in a Database at once?
  • If not, How can the DATATIME column of all entries in ONE table be shifted (i.e. add some offset)?

thanks for your answers!

like image 681
ducky Avatar asked Jan 31 '12 09:01

ducky


2 Answers

UPDATE table SET date_column = DATE_ADD(date_column, INTERVAL 1 YEAR);

This should do the trick.

like image 171
dgw Avatar answered Nov 09 '22 01:11

dgw


Try using INTERVAL keyword like

UPDATE table_name SET column_name = column_name + INTERVAL 1 unit

OR possibly this

ADDTIME() adds expr2 to expr1 and returns the result. expr1 is a time or datetime expression, and expr2 is a time expression.

SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');

Unit values goes like this

unit Value  Expected expr Format  
MICROSECOND MICROSECONDS  
SECOND  SECONDS  
MINUTE  MINUTES  
HOUR    HOURS  
DAY         DAYS  
WEEK    WEEKS  
MONTH   MONTHS  
QUARTER QUARTERS  
YEAR    YEARS  
like image 40
Uday Sawant Avatar answered Nov 09 '22 02:11

Uday Sawant