我在我的數據庫中使用以下格式的日期September 20, 2011 18:00:00
但是,如果我想在mysql中應用日期函數就像刪除此日期或更早的記錄一樣無效。正確的格式要做到這一點需要2011-09-20 18:00:00
。將時間和日期轉換爲mysql日期時間
那麼任何簡單的方法來將第一個日期轉換爲第二個日期?或者是否更容易在表中爲日期時間格式創建另一個字段?
我在我的數據庫中使用以下格式的日期September 20, 2011 18:00:00
但是,如果我想在mysql中應用日期函數就像刪除此日期或更早的記錄一樣無效。正確的格式要做到這一點需要2011-09-20 18:00:00
。將時間和日期轉換爲mysql日期時間
那麼任何簡單的方法來將第一個日期轉換爲第二個日期?或者是否更容易在表中爲日期時間格式創建另一個字段?
$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'
我不知道如何直接在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");
}
我沒有看到所有的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;
您應該將日期保存爲'datetime'格式,而不是'varchar'。保存數據,而不是演示。 – JJJ
當然,我的愚蠢。菜鳥misstake – halliewuud