如何在SQL中为YEAR编写NOT IN语句

时间:2017-10-19 15:46:40

标签: mysql sql

那些不是1997年出生的用户是谁?

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB IN YEAR(1997);

我做错了什么?

4 个答案:

答案 0 :(得分:3)

我猜测userDOB是一个日期

SELECT userFname, userLname, userDOB
FROM user
WHERE YEAR(userDOB) NOT IN (1997);

答案 1 :(得分:1)

保持简单:

YEAR(yourDate)仅返回yourDate年。

然后,要找出所有未在1997年出生的用户,只需

SELECT userFname, userLname, userDOB
FROM user
WHERE YEAR(userDOB) <> 1997

答案 2 :(得分:1)

我的纯粹主义部分反对使用YEAR函数的当前答案。为什么?因为使用函数会使条件忽略索引,这就是原因。

那么,答案通常是使用函数来创建范围:

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB >= CAST('1997-01-01' AS DATE)
      AND userDOB < CAST('1998-01-01' AS DATE)

...除了你实际上想要反向,所以让我们切换条件:

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB < CAST('1997-01-01' AS DATE)
      OR userDOB >= CAST('1998-01-01' AS DATE)

......在这一点上,我的纯粹主义并不是那么重要。为什么?由于选择了行(可能)的百分比,并且数据不太可能在同一索引中(Check the third point here)。

答案 3 :(得分:0)

你应该使用trhe YEAR()函数转换你的日期列,你可以不用来检查几个值

SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) NOT IN  (1997, 1998);

但是如果你只有一个价值,你不需要IN(或者不是)但是=

SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) <>  1997;