日期之间搜索错误

时间:2012-11-12 15:05:32

标签: php mysql date

在数据库中,我有表'用户'列'生日'

这是我用来获取结果的SQL查询

SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'

问题是我只获得1982年的记录

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

这可能是什么问题?

2 个答案:

答案 0 :(得分:2)

这只是Mark Byers的另一个答案。如果您的专栏birthday的数据类型为varchar且格式为dd/MM/yyyy,请阅读此内容;否则,请从Mark Byer's读取。

您需要做的第一件事是使用DATE将您的列转换为DATETIMESTR_TO_DATE数据类型,

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

SOURCES

答案 1 :(得分:1)

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

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

来自documentation

  

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

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