2012-12-20 145 views
0

局勢 我拉在RFC 2822的格式(2012年5時49分45秒+0000星期六,12月1)時間戳,並將其存儲在MySQL中的VARCHAR字段。我有一個start_date和end_date。MYSQL日期範圍RFC 2822

目標 搜索之間有兩個日期(如BETWEEN '2012-11-01' start_date和 '2012年12月1日')

的條件 我想用純SQL來做到這一點而不是做後期處理在PHP

可接受的妥協 我不想,但我會在需要的時候使用PHP轉換,並將其作爲DATETIME。

任何人都可以幫助我實現我的目標(上面列出)。 Rick

回答

1

您可以轉換您的字符串日期使用STR_TO_DATE做的日期時間:

select str_to_date('Sat, 01 Dec 2012 05:49:45 +0000','%a, %d %b %Y %T') 

如果您還需要轉換時區,試試這個:

set @datestring='Sat, 01 Dec 2012 05:49:45 +0000'; 
select 
    CONVERT_TZ(
    str_to_date(@datestring,'%a, %d %b %Y %T'), 
    concat(mid(@datestring, 27, 3), ':', mid(@datestring, 30, 2)), 
    '+00:00' 
) 
+0

我實際上是在這條路上,但當我到達時區時我撞到了一堵牆。 Theres沒有辦法解析使用SQL。 –

+0

@RickS有功能CONVERT_TZ,我認爲你可以使它工作,我會更新我的答案 – fthiella

0

將它們存儲爲本機DATETIME。這是唯一的理智方法。

你爲什麼如此反對使用適當的工具來完成這項工作?

+0

我想我會做到這一點,作爲表是非常新的,我可以開始將RFC2822日期轉換爲這樣的日期時間:'$ timestamp = strtotime('Tue,2008年9月30日10:30:00 EDT'); 回聲日期('Y-m-d g:i:s a',$ timestamp);' –

+0

您可以更快地切換到本機數據類型,效果會更好。儘可能使用適當的色譜柱類型。存儲字符串日期和時間的唯一原因是,如果它們來自外部數據源,並且您希望確保已正確轉換它們,請保留原始值和轉換後的值以進行比較。 – tadman

0

將時間戳存儲爲字符串對數據庫功能的使用較差。由於它們都是相同的格式,因此可以很容易地將它們轉換爲輸入的日期時間。