2016-09-09 10 views
1

私は日付フィールドと時刻フィールドを持つmysqlデータベースを持っています。 dbから次の引数を選択する必要があります。mysqlは2つの日付/時刻の間で選択します

日付は02/01/2016の間で、時間は12:00:00と12:00:00と日付が02/08/2016で、時間はそれ以下でも11:59:59であるから選択してください

シンプルなフォーラムでは、7日前から今日まで正午から正午までのすべてを選択したいと考えています.12:00:00は終了時刻です。

私はこのコードを持っていますが、それは私が仕事に行くのではないです

SELECT * 
FROM spiff 
WHERE `date` BETWEEN '" . $week_before . "' AND '" . $today . "' AND time <= '12:00:00' 
ORDER by id DESC 
+0

は真剣に単一のエンティティとして、日付と時刻を格納考えます – Strawberry

答えて

0

たいかなり何does notの。別のフィールドに日付と時刻を格納してから、両方で検索することはできません。後であなたがこれらの日付/時刻を持っている場合ことを意味し、「昼」、よりすべての時間を除いている:

02/02/2016 13:00 excluded 
02/03/2016 10:00 included 
02/04/2016 17:59 excluded 

でもこれらの日付は、あなたの指定した範囲内で、13:0017:59ものは除外されている彼らは」になりNOT < '12:00:00'

再あなたは、単一の日時フィールドとして日付を格納する必要があり、その後、クエリは簡単になり:

SELECT ... WHERE datetimefield BETWEEN '2016-02-01 12:00:00' AND '2016-02-08 11:59:59' 

、仕事に日付/時刻の比較これらの種類のために、あなたが持っていることに注意してくださいすることがmysqlの実際の日付/時刻フィールドを使用し、mysqlの日時文字列フォーマットはyyyy-mm-ddです。あなたの日付がmm/dd/yyyyとして格納されている場合、それらは日付じゃない、1009より大きいので、その

'10/11/2015' > '09/01/1970' -> TRUE 

を意味し、彼らは文字列だ、とMySQLの文字列比較の規則が適用されます。

0

問題は、日付と時間の部分が別々のフィールドにあることです。 where句の条件がAND time <= '12:00:00'であるため、MySQLは影響を受けたすべての日付の午前からレコードを返します。

最も良い解決策は、2つのフィールドをdatetimeのデータ型で1つに結合することです。この方法では、WHERE句は次のようになり場所:MM:

...`datime_field` BETWEEN '" . $week_before_noon . "' AND '" . $today_noon . "' 

2つのPHPの変数はYYYY-MM-DD HHの形式の有効な日時式含むことになり、SSを

代替ソリューションを組み合わせることですオンザフライ2つのフィールドの値が、あなたは、検索を高速化するためにインデックスを使用することはできません。この方法:

... date + time BETWEEN '" . $week_before . " 12:00:00' AND '" . $today . " 12:00:00' 
関連する問題