在SQL语句中的特定行申请一定条件

问题描述:

我有以下几列在SQL语句中的特定行申请一定条件

(名称:VARCHAR),(指明MyDate:DATE),(结束时间:TIME)

我试图让基于以下条件的特定行:

  1. 数值指明MyDate是在一定的范围
  2. 数值指明MyDate>日期内(NOW())
  3. 结束时间>时间(NOW()),这应该仅适用于“今天”日期行

问题出在endTime。例如,请考虑以下数据

  1. 苹果2011-02-01 21:00:00
  2. 橙2011-03-02 10:00:00
  3. 葡萄2011-05-10 11:00 :00

如果输入到查询是

  1. 范围:2011-01-01 2011-04-01到
  2. 日期(NOW()):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()) 

查询结果 '苹果'。但正确的结果是“苹果”和“橙色”。 问题是condition:endTime> time(NOW()),这只适用于“今天”的日期行。

我不想UNION,因为我原来的查询很大。 有没有一种方法可以将条件应用于特定的行。

任何想法表示赞赏。 谢谢。

用途:

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

ADDTIME function可以让你的日期和时间值(一个或多个)组合成一个单一的DATETIME,然后你就可以使用对NOW()/ CURRENT_TIMESTAMP。

坦率地说,附加标准是多余的...

+0

谢谢OMG小马。 – metalhawk 2010-12-17 02:27:26

试着让它只在日期位于边界时检查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

谢谢你的解决方案。它完全符合条件。 :) – metalhawk 2010-12-17 02:26:54