Php 从日期值为xxxx xx xx的sql值中选择一年

Php 从日期值为xxxx xx xx的sql值中选择一年,php,mysql,sql,linux,Php,Mysql,Sql,Linux,在我的SQL表中,bdayas列中存储了生日(例如)1987-02-31 我希望有一个选择查询,只选择年份,而忽略月份和日期,例如: SELECT FROM users WHERE bday=1987 这可能与以这种方式存储的日期有关吗?您只需使用: 您只需使用: 在MySQL中,如果您的bday是一个日期列(而不是文本列),则可以像下面这样使用year()函数: select * from users where year(bday)=1987; 在MySQL中,如果您的bday是一个日期

在我的SQL表中,
bday
as列中存储了生日(例如)
1987-02-31

我希望有一个选择查询,只选择年份,而忽略月份和日期,例如:

SELECT FROM users WHERE bday=1987
这可能与以这种方式存储的日期有关吗?

您只需使用:

您只需使用:


在MySQL中,如果您的bday是一个日期列(而不是文本列),则可以像下面这样使用year()函数:

select * from users where year(bday)=1987;

在MySQL中,如果您的bday是一个日期列(而不是文本列),则可以像下面这样使用year()函数:

select * from users where year(bday)=1987;

@如果字段是日期数据类型,那么soju的答案是正确的,但是

您明确表示您的数据库将它们存储为
1987-02-31

对我来说,这表明您可能正在处理一个数据库,该数据库使用varchar或另一个文本字段来存储应该是什么日期

如果是这种情况,您可以使用该函数

WHERE SUBSTRING(bday, 1,4) = '1987'

@如果字段是日期数据类型,那么soju的答案是正确的,但是

您明确表示您的数据库将它们存储为
1987-02-31

对我来说,这表明您可能正在处理一个数据库,该数据库使用varchar或另一个文本字段来存储应该是什么日期

如果是这种情况,您可以使用该函数

WHERE SUBSTRING(bday, 1,4) = '1987'

好的,它被存储为一个日期,所以使用YEAR函数将是最有效的?这取决于一些事情。实际上,我认为射程会更有效(@Wiseguy在soju回答中的注释)。我认为Date函数是最简单的处理方法,但是如果你纯粹从性能上考虑,我认为范围(介于两者之间)会更好。要想确定,你可以尝试两种方法并计时。根据记录的数量,差异可以忽略不计。在性能和简单性/可读性之间常常存在权衡。您选择哪条路线取决于您。好的,它存储为日期,因此使用年份函数将是最有效的?这取决于几件事。实际上,我认为射程会更有效(@Wiseguy在soju回答中的注释)。我认为Date函数是最简单的处理方法,但是如果你纯粹从性能上考虑,我认为范围(介于两者之间)会更好。要想确定,你可以尝试两种方法并计时。根据记录的数量,差异可以忽略不计。在性能和简单性/可读性之间常常存在权衡。你选择哪条路线取决于你自己。在'1987-01-01'和'1987-12-31'之间使用范围
是否更好?我认为对于范围,可以使用索引,但是对于函数,不能使用索引。我想。在'1987-01-01'和'1987-12-31'之间使用范围
是否更好?我认为对于范围,可以使用索引,但是对于函数,不能使用索引。我想。