6

取り組んでいるプロジェクトの Twitter データを記録しています。日付情報はThu, 14 Jul 2011 06:21:48 +0000文字列フィールドとして保存されます。

mySQL を使用して 2 つの日付の間にあるデータを選択するにはどうすればよいですか? 値よりも大きいデータまたは値より小さいデータを取得できますが、値の間では取得できません。

たとえば、データは次のとおりです。

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もステートメントを試しましたが、運がありません。

どんな助けでも大歓迎です!

4

5 に答える 5

8

文字列であり、実際の日付フィールドではないため、betweenは使用できません。日付の形式が常に同じであることがわかっている場合は、次のようにすることができます。 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'
于 2011-07-25T15:36:22.993 に答える
2

「2011年7月6日」と2011年6月15日を比較しています。

そのはず

SELECT * 
FROM twitter 
WHERE SUBSTR(twitter_date, 6, 11) >= '6 Jul 2011' 
AND SUBSTR(twitter_date, 6, 11) <= '21 Jul 2011'
于 2011-07-25T15:38:30.253 に答える
0

STR_TO_DATEMySQL関数を調べたいと思うかもしれません。これはあなたに日付を与え、その間は期待通りに機能するはずです。

于 2011-07-25T15:34:14.917 に答える
0

クエリは失敗します。日付ではなく、2つの文字列を比較しています。文字列を日付として扱いたいことをMySQLに明示的に伝える必要があります。これは日付情報なので、MySQLの日付または日時フィールドタイプに保存します。これにより、この問題をすべて回避できます。

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

左側を適切な日付値に強制すると、MySQLは右側も日付として扱う必要があることを示唆します。

于 2011-07-25T15:35:51.713 に答える
0


日付データを適切なDATETIMEフィールドに保持するようにテーブルを変更したら、日付とそれらのフィルタリングに関する次の質問に対する私の回答を参照することをお勧めします。これは役立つ場合があります。

たとえば、上記のクエリ/データで、クエリしている日付の1つにデータがない場合はどうなりますか?その日付の出力は得られず、グラフ化などで奇妙に見える場合があります。添付の​​質問で説明した手法を使用すると、その追加情報や、曜日、月などの他の有用な情報を取得できます。名前など

値が0の月を含め、指定された期間内のすべての月を選択します

お役に立てば幸いです。

于 2011-07-25T15:48:50.917 に答える