我有一个包含以下列的表
(name:varchar),(mydate:DATE),(endtime:TIME)
我正在尝试根据以下条件获取特定行:
问题在于endTime。例如,请考虑以下数据
如果查询的输入是
考虑查询
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,因为我的原始查询很大。 有没有办法可以将条件仅应用于某些行。
任何想法都表示赞赏。 感谢。
答案 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使用。
坦率地说,额外的标准是多余的......