2

「rooms_prices」というテーブルに次のレコードがあります

id  room_id     date_from   date_to price
55  11          02/01/2014  12/31/2014  2250

PHP コードで SQL ステートメントを実行しようとすると、クエリした日付が日付範囲内にない場合に常に結果が返されます。

これが私のSQLステートメントです:

SELECT price FROM rooms_prices WHERE room_id = 11 AND DATE_FORMAT( date_from, '%m/%d/%Y' ) <= '12/01/2013' AND DATE_FORMAT( date_to, '%m/%d/%Y' ) >= '12/01/2013'

この SQL ステートメントは常に 2250 を出力します。日付が 2014 年 2 月 1 日から 2014 年 12 月 31 日の間にある場合にのみレコードを返すはずです。

誰でもこれを修正する方法を知っていますか?

4

1 に答える 1

2

YMD 順で日付形式を使用します。

SELECT price
FROM rooms_prices
WHERE room_id = 11 AND
      DATE_FORMAT( date_from, '%Y-%m-%d' ) <= '2013-12-01' AND
      DATE_FORMAT( date_to, '%Y-%m-%d' ) >= '2013-12-01';

比較を文字列として行っているため、バージョンが失敗しています。

実際には、比較を日付として行う方が良いでしょう:

SELECT price
FROM rooms_prices
WHERE room_id = 11 AND
      date_from <= date('2013-12-01') AND
      date_to >= date('2013-12-01');

または、単に使用するだけでもbetween:

WHERE room_id = 11 AND
      date('2013-12-01') between date_from and date_to
于 2013-08-24T11:46:39.590 に答える