Php 日期之间的错误搜索

Php 日期之间的错误搜索,php,mysql,date,Php,Mysql,Date,在数据库中,我的表用户有“生日”列 下面是我用来获取结果的sql查询 SELECT * FROM (`users`) WHERE `birthday` between '12/11/1982' and '31/01/1983' 问题是我只得到1982年的记录 请注意,1983年的记录是存在的 这里可能有什么问题?您应该将年份放在日期文字的第一位: SELECT * FROM `users` WHERE `birthday` between '1982-11-12' AND '1983-01-3

在数据库中,我的表用户有“生日”列

下面是我用来获取结果的sql查询

SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'
问题是我只得到1982年的记录

请注意,1983年的记录是存在的


这里可能有什么问题?

您应该将年份放在日期文字的第一位:

SELECT *
FROM `users`
WHERE `birthday` between '1982-11-12' AND '1983-01-31'
从:

日期和时间值可以用几种格式表示,例如带引号的字符串或数字,具体取决于值的确切类型和其他因素。例如,在MySQL需要日期的上下文中,它将“2015-07-21”、“20150721”和“20150721”中的任何一个解释为日期


如果您使用的是
varchar
类型,那么将日期放在第一位(在数据和查询中)仍然是有意义的,因为在使用默认排序顺序时,您的日期将正确排序。

这只是Mark Byers的一个备选答案。如果您的列
生日
的数据类型为
varchar
,且格式为
dd/MM/yyyy
,请务必阅读此内容;否则,请阅读

您需要做的第一件事是使用
STR\u to\u DATE
将列转换为
DATE
DATETIME
数据类型

SELECT *
FROM  `users`
WHERE STR_TO_DATE(`birthday`,'%d/%m/%Y')
          between '1982-01-12' and '1983-12-31'
来源


您的专栏的数据类型是什么
生日
,它是如何格式化的?请在执行之前尝试格式化数据。阅读关于或TO_SECONDS()。请运行
SHOW CREATE TABLE users\G
并以
YYYY-MM-DD
格式将其发布在问题SQL存储日期中,但他尝试在“DD/MM/YYYY”中搜索。甚至都不接近。所以,我想,第一步是将日期转换为unix时间戳或普通日期戳。