在SQL语句中的特定行上应用特定条件

时间:2010-12-17 01:59:09

标签: sql mysql

我有一个包含以下列的表

(name:varchar),(mydate:DATE),(endtime:TIME)

我正在尝试根据以下条件获取特定行:

  1. mydate在一定范围内
  2. mydate>日期(NOW())
  3. endTime>时间(NOW()),这应仅适用于“今日”日期行
  4. 问题在于endTime。例如,请考虑以下数据

    1. apples 2011-02-01 21:00:00
    2. orange 2011-03-02 10:00:00
    3. grape 2011-05-10 11:00:00
    4. 如果查询的输入是

      1. 范围:2011-01-01至2011-04-01
      2. date(NOW()):2011-01-01
      3. 时间(现在()):20:00:00
      4. 考虑查询

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

        查询结果只有'apples'。但正确的结果是'苹果'和'橙色'。 问题是条件:endTime>时间(NOW()),这应该仅适用于“今日”日期行。

        我不想UNION,因为我的原始查询很大。 有没有办法可以将条件仅应用于某些行。

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

2 个答案:

答案 0 :(得分: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())))

答案 1 :(得分:1)

使用:

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

ADDTIME function将允许您将DATE和TIME值合并到一个DATETIME中,然后可以对NOW()/ CURRENT_TIMESTAMP使用。

坦率地说,额外的标准是多余的......