2012-10-17 92 views
7

我在MySQL數據庫中有一個時間戳「2011年9月13日17:16:28 PDT」。數據庫中字段的類型是VARCHAR。我想將這個VARCHAR轉換爲MySQL中的TIMESTAMP類型的字段。將VARCHAR時間戳轉換爲TIMESTAMP?

我嘗試了幾個solutions suggested elsewhere on this site,比如使用string_to_time函數,但是這些解決方案都是從不同類型的時間戳開始的。

如何將上述VARCHAR時間戳轉換爲MySQL認可的TIMESTAMP,以便我可以按日期對數據進行排序?

+0

[STR_TO_DATE()](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date),如果這就是你的意思, *提供幾乎*所有的格式說明符。我能看到的唯一例外是時區。你有很多不同的時區嗎? –

回答

7

您可以在MySQL中使用STR_TO_DATE功能做到這一點,試試這個:

SELECT STR_TO_DATE("17:16:28 Sep 13, 2011 PDT", '%H:%i:%s %b %d, %Y PDT'); 

編輯:

SELECT STR_TO_DATE(field_name, '%H:%i:%s %b %d, %Y PDT') AS new_time 
FROM table_name; 
+0

請參閱我對其他答案的評論。 – Mark

+0

用查詢更新答案。另見http://stackoverflow.com/questions/2523286/mysql-convert-tz – Omesh

+1

非常感謝,Omesh。這工作完美。我發現我的數據庫中只有兩個時區,每個時區我執行'update tablename set newdate = STR_TO_DATE(olddate,'%H:%i:%s%b%d,%Y PDT'),其中olddate比如'%PDT%'(第二次將PDT改爲PST)並得到我想要的。 – Mark

2

使用STR_TO_DATE與格式:

select unix_timestamp(str_to_date("17:16:28 Sep 13, 2011 PDT","%T %b %d, %Y PDT")); 

如果日部分(例如:13)不表示爲01,02 ..等等。但是當它只有一個數字時,請將%d更改爲%e

請小心,因爲時區不會被識別,它只是格式化的字符串文字!如果你對不同的記錄有不同的時區,你應該使用convert_tz()函數來獲得正確的時間戳。

+0

我注意到,每個人總是拿出完全相同的例子,包含「2011年9月13日17:16:28 PDT」。這不是我要找的。我不想轉換一個字符串。我想轉換一個SQL字段。另外,得到convert_tz()的任何例子? – Mark

+0

我想這是因爲這個例子取自你的問題:) 另外@Omesh已經回答了關於如何轉換字段的其他部分。更具體地說,將varchar值轉換爲另一個字段,這是IMO的一個好方法。 – Andrew

+0

阿哈......你說的對日期本身是對的,但我的意思是,無論我看到的是什麼,在我看來,stackoverflow.com人們傾向於使用字符串而不是字段引用,這真的讓我感到意外,因爲MySQL通常是關於如何閱讀並從字段而不是字符串處理數據。 另外,我不明白你爲什麼添加了unix_timestamp函數。這真是不必要的。 – Mark