那些不是1997年出生的用户是谁?
SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB IN YEAR(1997);
我做错了什么?
答案 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;