Mysql 如何在SQL中为年份编写NOT IN语句

Mysql 如何在SQL中为年份编写NOT IN语句,mysql,sql,Mysql,Sql,那些不是1997年出生的用户是谁 SELECT userFname, userLname, userDOB FROM user WHERE userDOB IN YEAR(1997); 我做错了什么?我猜userDOB是约会对象 SELECT userFname, userLname, userDOB FROM user WHERE YEAR(userDOB) NOT IN (1997); 我猜userDOB是个约会对象 SELECT userFname, userLname, userDO

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

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

我做错了什么?

我猜userDOB是约会对象

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

我猜userDOB是个约会对象

SELECT userFname, userLname, userDOB
FROM user
WHERE YEAR(userDOB) NOT IN (1997);
您应该使用trhe YEAR()函数来转换日期列,并且可以使用not in来检查多个值

SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) NOT IN  (1997, 1998);
但如果只有一个值,则不需要输入(或不输入),但=

选择userFname、userLname、userDOB
来自用户
其中,年份(userDOB)为1997年;
您应该使用trhe YEAR()函数来转换日期列,并且可以使用not in来检查多个值

SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) NOT IN  (1997, 1998);
但如果只有一个值,则不需要输入(或不输入),但=

选择userFname、userLname、userDOB
来自用户
其中,年份(userDOB)为1997年;
让事情变得简单:

YEAR(yourDate)
只返回
yourDate
的年份

然后,为了找出所有不是1997年出生的用户,只需

选择userFname、userLname、userDOB
来自用户
何处年份(userDOB)1997
让事情变得简单:

YEAR(yourDate)
只返回
yourDate
的年份

然后,为了找出所有不是1997年出生的用户,只需

选择userFname、userLname、userDOB
来自用户
何处年份(userDOB)1997

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

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

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB >= CAST('1997-01-01' AS DATE)
      AND userDOB < CAST('1998-01-01' AS DATE)
选择userFname、userLname、userDOB
来自用户
其中userDOB>=CAST('1997-01-01'为日期)
和userDOB
。。。除非你想要相反的结果,所以让我们切换条件:

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB < CAST('1997-01-01' AS DATE)
      OR userDOB >= CAST('1998-01-01' AS DATE)
选择userFname、userLname、userDOB
来自用户
其中userDOB=CAST('1998-01-01'为日期)

。。。在这一点上,我的纯粹主义并不那么重要。为什么?由于所选行(可能)的百分比,以及数据不可能在同一索引()中。

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

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

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB >= CAST('1997-01-01' AS DATE)
      AND userDOB < CAST('1998-01-01' AS DATE)
选择userFname、userLname、userDOB
来自用户
其中userDOB>=CAST('1997-01-01'为日期)
和userDOB
。。。除非你想要相反的结果,所以让我们切换条件:

SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB < CAST('1997-01-01' AS DATE)
      OR userDOB >= CAST('1998-01-01' AS DATE)
选择userFname、userLname、userDOB
来自用户
其中userDOB=CAST('1998-01-01'为日期)

。。。在这一点上,我的纯粹主义并不那么重要。为什么?由于所选行(可能)的百分比,且数据不可能位于同一索引()中。

是否有[userDOB]值为空或null,或者不是日期/时间数据类型?您可能需要适应这种情况。另外,我会使用YEAR(userDOB)!=1997年[userDOB]值是否为空或null,或者不是日期/时间数据类型?您可能需要适应这种情况。另外,我会使用YEAR(userDOB)!=1997