2016-06-15 29 views
-1

ここからは、今日から1週間以内にmysqlテーブルからデータを取得しています。私の唯一のchallangeは日付がVARCHAR形式のDMのD Yに格納されていることであるVARCHAR日付に基づいてmysqlの日付範囲を選択

私のテーブルが格納Date例:水曜日2016年7月3日

マイコードは次のとおりです。

$result = mysqli_query($con," SELECT * FROM `BIMTECH_academy_2016_classes` WHERE STR_TO_DATE(Date, '%D %M %d %Y') > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY Date,From DESC; "); 
    while($row = mysqli_fetch_array($result)) 
    { 
      echo $row['ClassNumber']; 
      echo $row['CourseName']; 
      echo $row['Date']; 
      echo $row['From']; 
      echo $row['To']; 
    } 

My Current Table

+0

http://stackoverflow.com/questions/3296725/parse-date-in-mysql –

+0

あなたの現在のコードが悪いのか? SELECT STR_TO_DATE(日付、 '%D%M%d%Y')FROM BIMTECH_academy_2016_classes'は何を表示しますか? (ちょうどデータベースの列型を修正できませんか?) –

+0

MySQL ** [date_format](http://www.w3schools.com/sql/func_date_format.asp)**関数を使用して日付を書式設定することができます。 –

答えて

0

これは...うーん、少し悲しい。過度のオーバーヘッドなしにデータを照会することができるため、日付は適切なデータ型として保存する必要があります。万一の場合は、これらの日付を有効な日付形式に変換し、列タイプをdateまたはdatetimeに変更してください。

一方、MySQLのSTR_TO_DATE()関数を使用することができますが、それはクエリの一部であるWHEREで使用されるため、MySQLは常にテーブル全体をスキャンし、内部的にすべての文字列を日付に変換し、あなたが必要なもの。テーブルにたくさんのデータが格納されていると、それは本当に遅くなる可能性があります。 MySQLはすべてのカラムをフェッチしてから変換しなければならないので、カラムのインデックス付けは役に立ちません。

+1

正確に。少なくともDATEとTIMEを使用してくださいhttps://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html ...私はそれをしないことを意味します、 しかし、少なくとも。 – Drew

0

例: あなたの列名に@dateを置くだけで、必要な書式で返される日付を取得する必要があります。

SET @date = "Sun Jul 10 2016"; 
SELECT DATE_FORMAT(STR_TO_DATE(@date,"%a %b %d %Y"),"%Y-%m-%d") as formatted_date 

詳細:DATE_FORMATSTR_TO_DATE

関連する問題