2010-12-17 12 views
0

私は、次の列SQL文で特定の行に特定の条件を適用します

を持つテーブルがある

(名前:varchar型)、(MyDateに該当:DATE)、(終了時刻:TIME)

私が取得しようとしています以下の条件に基づいて特定の行:

  1. MyDateに該当がある範囲
  2. MyDateに該当>日付(NOW())
  3. endTimeは>時間(NOW())内で、これは唯一に適用します「今日の」日付行

問題はendTimeにあります。たとえば、次のようなデータに

  1. りんご2011-02-01午前21時00分○○秒
  2. オレンジ2011-03-02午前10時00分00秒
  3. ブドウ2011-05-10 11:00考えます:00

クエリへの入力は

  1. 範囲であれば:(NOW())2011-01-01
  2. 2011-04-01に日付:2011 -01-01
  3. 時間(NOW()):

午前20時00分00秒は、クエリに

SELECT name FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
AND date >= DATE(NOW()) 
AND endTime > TIME(NOW()) 

クエリの結果のみ 'りんご' を考えてみましょう。しかし正しい結果は「リンゴ」と「オレンジ」です。 問題は条件:endTime> time(NOW())ですが、これは「今日の」日付行にのみ適用されます。

私の元のクエリが大きいので、私はUNIONにしたくないです。 条件を特定の行にのみ適用できる方法はありますか。

アイデアをいただければ幸いです。おかげさまで

答えて

1

用途:

SELECT name 
    FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
    AND ADDTIME(mydate, endtime) > NOW() 

ADDTIME functionはあなたが、その後NOW()/ CURRENT_TIMESTAMPに対して使用することができ、単一のDATETIME、DATEへとTIME値(複数可)を組み合わせることができます。

正直言って、追加の基準は冗長です...

+0

ありがとうOMGポニー。 – metalhawk

1

日付が境界にある場合にのみendTimeを確認するようにしてください。

SELECT name FROM mytable 
WHERE mydate BETWEEN '2011-01-01' AND '2011-04-01' 
AND (date > DATE(NOW()) 
OR (date = DATE(NOW()) AND endTime > TIME(NOW()))) 
+0

ありがとうございますmdarwiソリューションです。それは条件にちょうど適合します。 :) – metalhawk

関連する問題