SQL,AND,OR在一个语句中

时间:2013-12-16 12:35:02

标签: mysql sql

我正在努力解决这个问题,但我无法做到这一点。

这是我的问题:

SELECT * 
FROM  `users` 
WHERE (
   fname LIKE  '%Toms%'
   OR lname LIKE  '%Toms%'
)
AND (
   bDate <1991 /12 /03
   AND regDate >2000 /12 /03
   AND lastActivity >2000 /12 /03
)
LIMIT 0 , 30

我想要的是为用户提供名字或姓氏'Toms',他们出生于1991年之前,但在2000年之后注册。我得到的只是所有用户名为'Toms',就像没有第二部分到查询!

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

SELECT *
FROM `users`
WHERE ( fname LIKE '%Toms%'
    OR lname LIKE '%Toms%')
    AND (bDate < '1991-12-03'
     AND regDate > '2000-12-03'
     AND lastActivity > '2000-12-03')
LIMIT 0, 30

您的列bDate,regDate和lastActivity应为DATE类型。 否则,如果是日期时间类型

SELECT *
FROM `users`
WHERE ( fname LIKE '%Toms%'
    OR lname LIKE '%Toms%')
    AND (DATE(bDate) < '1991-12-03'
     AND DATE(regDate) > '2000-12-03'
     AND DATE(lastActivity) > '2000-12-03')
LIMIT 0, 30

答案 1 :(得分:1)

您的日期格式错误,不会用引号括起来。尝试:

SELECT * 
FROM  `users` 
WHERE (
   fname LIKE  '%Toms%'
   OR lname LIKE  '%Toms%'
)
AND (
   bDate < "1991-12-03"
   AND regDate > "2000-12-03"
   AND lastActivity > "2000-12-03"
)
LIMIT 0 , 30