2011-07-25 23 views
6

我一直在爲我正在處理的項目錄制Twitter數據,日期信息在字符串字段中保存爲Thu, 14 Jul 2011 06:21:48 +0000在MySQL中的兩個日期字符串之間獲取數據

如何選擇使用mySQL的日期之間的數據?我可以獲得比數值大或小於數值但不在數值之間的數據。

例如數據是:

Thu, 14 Jul 2011 06:21:48 +0000 
Thu, 14 Jul 2011 12:18:21 +0000 
Thu, 14 Jul 2011 18:48:00 +0000 
Thu, 14 Jul 2011 23:48:02 +0000 
Fri, 15 Jul 2011 06:48:10 +0000 
Fri, 15 Jul 2011 12:48:00 +0000 
Fri, 15 Jul 2011 18:43:32 +0000 
Fri, 15 Jul 2011 23:44:08 +0000 
Sat, 16 Jul 2011 06:47:08 +0000 
Sat, 16 Jul 2011 12:46:49 +0000 
Sat, 16 Jul 2011 18:45:41 +0000 
Sat, 16 Jul 2011 23:41:27 +0000 

我的SQL字符串:

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '2011-06-15' 
AND SUBSTR(twitter_date, 6, 11) <= '2011-06-21' 

我試過BETWEEN陳述很好,但沒有運氣。

任何幫助將不勝感激!

+0

[在MySQL上的兩個日期之間獲取數據]的可能的重複(http://stackoverflow.com/questions/2716336/get-data-between-two-date-on-mysql) – genesis

+0

考慮使用「BETWEEN」關鍵字。 –

+0

@genesis,這不是重複的,看起來更接近 –

回答

7

您不能在兩者之間使用,因爲它們是字符串而不是實際日期字段。如果您知道日期的格式都是一樣的,你可以做到以下幾點: STR_TO_DATE(str,format)

SELECT * 
FROM twitter 
WHERE STR_TO_DATE(twitter_date, '%a, %c %b %Y %k:%i:%s') 
     between '2011-06-15' AND '2011-06-21' 
+0

謝謝!有用! – andrebruton

0

您可能想要查看MySQL的STR_TO_DATE函數。這會給你一個日期和兩者之間應該按預期工作。

+0

試過但沒有工作 – andrebruton

0

查詢將失敗。您正在比較兩個STRINGS,而不是日期。您需要明確告訴MySQL您想將字符串視爲日期。由於它是最新的信息,將其存儲在MySQL中的日期或日期時間字段類型,這樣可以節省一切麻煩:

SELECT STR_TO_DATE(SUBSTR(twitter_date, 6, 11)) >= '2011-06-15' ... 

迫使你的左手側是一個適當的日期值會提示到MySQL,它應該將右側視爲日期。

2

你是比較「2011年7月6日」與2011-06-15。

應該

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '6 Jul 2011' 
AND SUBSTR(twitter_date, 6, 11) <= '21 Jul 2011' 
0


一旦你改變了你的表來保存在適當的日期時間字段的日期數據,你可能要參考我的回答以下問題有關日期和過濾他們,這可能證明是有用的。

例如,在上面的查詢/數據中,如果您沒有查詢某個日期的數據,會發生什麼情況?您在該日期不會得到任何輸出,這在繪製圖表時可能看起來很奇怪。如果您使用我在附加問題中描述的技術,則可以獲得附加信息以及其他有用的信息,例如星期幾,月名稱等

Select all months within given date span, including the ones with 0 values

希望幫助!

相關問題