2013-01-24 15 views
19

Mam kilka dat w naszej bazie danych przechowywanych w standardowym typie daty mysql.Zmiana roku w mysql daty

Jak mogę ukryć rok do 2013, niezależnie od daty pierwotnej.

Tak więc jeśli datą jest 2009-01-01, to będzie 2013-01-01, ale jeśli jest 2012-01-04, to zamieni się na 2013-01-14.

Pomyślałem, że to będzie proste i oczywiste, ale nie mogłem zrozumieć to =/

Odpowiedz

46

To proste:

dla 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

Idealny. Dziękuję Ci! – Andelas

6
UPDATE tableName 
SET dateColumn = dateColumn + INTERVAL 4 YEAR 

Innym sposobem jest je łączyć,

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

Jeśli jej pole data:

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

Jeśli jej pole czas data:

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

Aktualna data od poszukiwań było 2013, rozumiem, że jesteś życzeń Alarm Obecny rok w terminie.

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

Problem z bieżącymi odpowiedziami polega na tym, że żaden z nich nie bierze pod uwagę roku przestępnego. Jeśli wybierzesz datę "2016-02-29" i przekształcisz ją w rok 2013 przez konkatenację, otrzymasz "2013-02-29", co nie jest prawidłową datą. Jeśli uruchomisz DATE_FORMAT ("2013-02-29", "% Y-% m-% d"), wynikiem jest null. Zobacz przykład tutaj:

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

Lepszym sposobem zmiany rok jest użycie DATE_ADD ponieważ stanowi ona letniego. Na przykład:

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

Można zastąpić CURRENT_DATE() z „2013-01-01” jeśli nadal chce przekształcić wszystkie daty do 2013 zamiast bieżącego roku. Przykład tego rozwiązania jest tutaj:

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