2013-01-24 101 views
19

我在我們的數據庫中存儲了一堆日期,存儲在標準的mysql日期類型中。在mysql日期中更改年份

無論原始日期如何,我如何隱藏一年到2013年。

所以如果一個日期是2009-01-01這將是2013-01-01,但如果它是2012-01-04,它會轉換爲2013-01-14。

我想這會是簡單而明顯的,但我無法弄清楚=/

回答

46

這很簡單:

爲DATETIME:

UPDATE table_name 
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d %T'); 

爲DATE:

UPDATE table_name 
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d'); 
+0

完美。謝謝! – Andelas

6
UPDATE tableName 
SET dateColumn = dateColumn + INTERVAL 4 YEAR 

其他的方式是連接它,

UPDATE Table1 
SET DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d')) 
1

如果它的日期字段:

UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,6)); 

如果它是一個日期時間字段:

UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,15)); 
1

從尋求當前日期是2013年,我明白,你想設置當前年份日期。

UPDATE table_name SET date_col=DATE_FORMAT('2013-05-06',YEAR(CURRENT_DATE)-%m-%d); 
6

目前答案的問題是,他們都沒有考慮閏年。如果您採用日期「2016-02-29」並通過串聯將其轉換爲2013年,則會獲得「2013-02-29」,這不是有效的日期。如果您運行DATE_FORMAT('2013-02-29','%Y-%m-%d'),結果爲null。這裏看一個例子:

http://sqlfiddle.com/#!9/c5358/11

一個更好的辦法來改變一年使用DATE_ADD,因爲它佔了夏令時。例如:

SELECT 
DATE_FORMAT(DATE_ADD(datecol, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(datecol)) YEAR), '%Y-%m-%d') `date` 
FROM t; 

你可以替換與「2013-01-01」 CURRENT_DATE(),如果你仍然希望所有日期轉換爲2013,而不是當前的年份。這種解決方案的一個例子是在這裏:

http://sqlfiddle.com/#!9/c5358/12

相關問題