2010-11-10 20 views

回答

13

您可以使用MySQL的STR_TO_DATE(str, format)功能。

例如,用於轉換一個切換出my_date_col

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

謝謝,我會試試這個! – stefano 2010-11-10 15:24:15

+1

請考慮標記其中一個答案,以便我們知道問題已關閉;) – conny 2010-11-15 02:19:21

2

您可以使用STR_TO_DATE()通過以下方式來將文本信息轉換到一個DATE

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

如果需要此DATE在一個特定的格式,你可以使用DATE_FORMAT()
這可能是沒有必要在你的情況,但在這裏是爲了完整的例子:

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

所以,你可以用一個單一的UPDATE這樣做對整個表更換與重新格式化數據當前數據(同時保持數據類型相同):

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

或者,如果你想列DATE的數據類型轉換,你可以更改表創建一個新的DATE格式化列,用上面的更新,以填補該列,刪除原來的列,和en(可選)將新列重命名爲舊名稱。

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

它不能正常工作..您可以讓plaese演示一個小提琴演示。 – user1896796 2013-02-27 10:54:15

1

這應該工作,但它不會:

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; 

而且這應該工作:不工作

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

服務器版本:5.0.95社區日誌的MySQL Community Edition(GPL)

但是,這是有效的:

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

使用MySQL - 我找不到任何可靠工作的解決方案。即使是相同的確切日期也沒有成功轉換。

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

以上是有幫助的,但下面的工作在我的Mysql。

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

現在刪除oldcolumn(如果你願意的話)。