2014-11-02 29 views
-1

我试图运行下面的SQL语句SQL日期时间小于NOW()返回无效的结果

SELECT 
    P.team_id, 
    P.id, 
    M.id, 
    P.`end`, 
    UHT.user_id 
FROM phase P 
INNER JOIN module M 
    ON P.Module_id = M.id 
JOIN user_has_team UHT 
    ON UHT.team_id = P.team_id 
WHERE 
    M.module_type = 7 OR 
    M.module_type = 8 AND 
    P.end < NOW(); 

这个结果返回180行。如果我去这些行的底部,我得到的结果看起来像这样:

'52', '130', '275', '2014-12-16 00:00:00', '49' 

这只是很多中的一个。

首先我想:“嘿,也许服务器的时间无效”

但是当我运行SELECT NOW()我得到以下结果:

'2014-11-02 19:38:49' 

但是,是什么问题呢?

+0

请停止将您的MySql问题标记为SQL Server。那里没有'now()'函数。 – 2014-11-02 22:00:19

回答

1

由于SQL中的运算符优先级,您需要更多的括号。

试着改变你的WHERE子句从

WHERE M.module_type = 7 or M.module_type = 8 AND P.end < NOW(); 

WHERE (M.module_type = 7 or M.module_type = 8) AND P.end < NOW(); 
0

查找到运算符优先级,查询被解释为:

WHERE (M.module_type = 7) 
or 
((M.module_type = 8) 
AND P.end < NOW()); 

但你需要

WHERE (M.module_type = 7 or M.module_type = 8) AND P.end < NOW(); 
相关问题