2010-11-10 13 views

cevap

13

Sen STR_TO_DATE(str, format) MySQL fonksiyonunu kullanabilirsiniz. Bir dönüştürülmüş biri için my_date_col dışarı anahtarlama

Örnek:

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 

UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 

ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 

ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 
+0

Teşekkürler, bunu deneyeceğim! – stefano

+1

Lütfen cevaplardan birini işaretlemeyi düşünün, böylece sorunun kapalı olduğunu biliyoruz;) – conny

2

Sen için metninizi dönüştürmek için aşağıdaki şekilde STR_TO_DATE() kullanabileceğiniz bir DATE:

STR_TO_DATE(datefield , "%d/%m/%Y") 

Eğer bu DATE gerekiyorsa belirli bir formatta, DATE_FORMAT()'u kullanabilirsiniz.
muhtemelen Bu durumda gerekli değildir, ama burada şeyiyle bir örnek: Yani

DATE_FORMAT(STR_TO_DATE(datefield , "%d/%m/%Y") , "%Y/%m/%d") 

, siz (yeniden biçimlendirilmiş verilerle güncel verileri değiştirmek için tek UPDATE ile tüm masanın üzerinden bu yapabileceğini) aynı veri türü tutarken:

UPDATE tableName 
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y"),"%Y/%m/%d"); 

Yoksa sütuna DATE veri türünü dönüştürmek istiyorsanız, masa, yeni DATE biçimlendirilmiş sütun oluşturun bu sütunu doldurmak için yukarıdaki güncelleştirme kullanmak değiştirebilir orijinal sütunu ve en (isteğe bağlı olarak) yeni sütunu eski ada göre yeniden adlandır.

ALTER tableName 
ADD modifiedDate DATE; 

UPDATE tableName 
SET modifiedDate = DATE_FORMAT(STR_TO_DATE(originalDate ,"%d/%m/%Y") ,"%Y/%m/%d"); 

ALTER tableName 
DROP COLUMN originalDate; 

ALTER tableName 
CHANGE COLUMN modifiedDate originalDate; 
+0

Çalışmıyorsa, bir gösteri demo gösterebilirsiniz. – user1896796

1

Bu çalışması gerekir ama öyle değil:

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 
UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 
ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 
ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 

Ayrıca, bu çalışması gerekir: MySQL 5.0.95-toplum-log:

UPDATE db_test SET anticipated_court_date = DATE_FORMAT(STR_TO_DATE(anticipated_court_date,"%d/%m/%Y"),"%Y-%m-%d"); 

Sunucu sürümü Çalışmıyor Topluluk Sürümü (GPL)

Ancak bu şu şekilde çalışır:

SELECT STR_TO_DATE('8/31/12', '%m/%d/%Y'); // WORKS 

MySQL'i Kullanma - Güvenilir şekilde çalıştı herhangi bir çözüm bulamadık. Aynı kesin tarih bile başarıyla dönüştürülmedi.

The solution I've found is this: PHP 
$user_date = "8/31/12"; // WORKS 
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date)); 
0

Yukarıdakiler yardımcı oldu, ancak aşağıdaki Mysql'de benim için çalıştı. (Isterseniz)

ALTER TABLE `tablename` ADD `newcolumn` DATE NOT NULL ; 
UPDATE `tablename` SET `newcolumn`=STR_TO_DATE(`oldcolumn`, '%d/%c/%Y') 

Şimdi oldcolumn silin.

İlgili konular