2011-06-13 72 views
3

不要問爲什麼(這是我的控制之外的東西),但日期被存儲爲我們的MySQL DB中的varchar(125)RFC-822。存儲爲varchar/rfc822的排序日期

RFC-822 = Mon Jun 13 2011 11:30:00 GMT-0400 (EDT)Mon Jun 13 17:00:00 EDT 2011

有沒有一種方法,我可以按日期以該格式或者至少是進行排序,拉出來日期爲YYYYMMDD或Unix時間?

+0

有什麼辦法可以通過PHP或其他腳本語言來運行它嗎?據我所見,這在mySQL中是不可能的,因爲['STR_TO_TIME'](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-到目前爲止)不能處理時區bit – 2011-06-13 17:15:16

回答

1

一些巫術可以與第一格式幫助:

SET @dt = 'Mon Jun 13 2011 11:30:00 GMT-0400 (EDT)'; 

SELECT  
CONVERT_TZ(
    -- Parse all, but timezone 
    STR_TO_DATE(@dt, '%a %b %e %Y %H:%i:%s'), 

    -- Parse timezone to '+NN:NN' format 
    INSERT(SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, 'GMT', -1), ' ', 1), 4, 0, ':'), 

    -- Our unified timezone 
    '+00:00' 
); 

-- Result: 2011-06-13 15:30:00 

CONVERT_TZ支持EDT-類似縮寫過,但不是無處不在。

+0

這是相當的查詢和相當的幫助。謝謝!現在我將以你爲例,修改它爲'2011年6月13日星期一17:00:00 EDT'。再一次感謝你。 – bafromca 2011-06-14 14:09:17

+0

我最終使用'SET @dt ='Fri Jul 1 13:00:00 EDT 2011';'和'SELECT CONCAT(SUBSTRING_INDEX(@dt,'EDT',-1),' - ',SUBSTRING_INDEX(STR_TO_DATE @dt,'%a%b%e%H:%i:%s'),'0000-',-1))AS datetime;'謝謝! – bafromca 2011-06-21 14:43:33