2011-09-20 292 views
0

我在我的數據庫中使用以下格式的日期September 20, 2011 18:00:00 但是,如果我想在mysql中應用日期函數就像刪除此日期或更早的記錄一樣無效。正確的格式要做到這一點需要2011-09-20 18:00:00將時間和日期轉換爲mysql日期時間

那麼任何簡單的方法來將第一個日期轉換爲第二個日期?或者是否更容易在表中爲日期時間格式創建另一個字段?

+2

您應該將日期保存爲'datetime'格式,而不是'varchar'。保存數據,而不是演示。 – JJJ

+0

當然,我的愚蠢。菜鳥misstake – halliewuud

回答

1
$s = 'September 20, 2011 18:00:00'; 
$unix_timestamp = strtotime($s); 
$mysql_timestamp = date('Y-m-d H:i:s',$unix_timestamp); // now looks like '2011-09-20 18:00:00' 
0

我不知道如何直接在mysql中完成它,但是你可以創建一個助手腳本。以下

僞代碼:

$data = db_query("SELECT id, date FROM footable"); 

foreach ($data => $item) { 
    // repeat line below for all months 
    $new_item string_replace($item, "September", 9) 
    $new_date = regex_replace($new_item, 
    "([0-9]{1,2}) ([0-9]{1,2}), ([0-9]{4}) (.*)", 
    "$3-$2-$1 $4"); 
    db_query("UPDATE footable SET date = $newdate"); 
} 
0

我沒有看到所有的MySQL的答案。 :)

假設你的「日期時間」字段被稱爲「DT」,你可以先格式化字符串到的東西MySQL將識別爲DATETIME的字符串格式,然後改變其更改爲正確的類型(DATETIME)該列的類型。如果您或我的拼寫錯誤在下面,請備份方便。

SET sql_mode=ansi; -- for || operator 

UPDATE tbl SET dt = LEFT(SUBSTRING_INDEX(dt, ' ', -2), 4)   -- YYYY 
        || '-' 
        || LPAD(FIELD(SUBSTRING_INDEX(dt, ' ', 1),  -- MM 
            'January', 'February', 'March', 
            'April', 'May', 'June', 'July', 
            'August', 'September', 'October', 
            'November', 'December'), 
          2, '0') 
        || '-' 
        || LPAD(SUBSTRING_INDEX(      -- DD 
             SUBSTRING_INDEX(dt, ',', 1), 
          ' ', -1), 2, '0') 
        || ' ' 
        || SUBSTRING_INDEX(dt, ' ', -1);     -- hh:mm:ss 

ALTER TABLE tbl CHANGE dt dt DATETIME; 
相關問題