1

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

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

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

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

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

这里可能是什么问题?

4

2 回答 2

2

这只是 Mark Byers 的另一个答案。如果您的列的数据类型birthdayvarchar并且格式为dd/MM/yyyy,请阅读此;否则,请阅读Mark Byer 的.

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

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

来源

于 2012-11-12T15:26:00.617 回答
1

您应该在日期文字中将年份放在首位:

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

文档中:

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

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

于 2012-11-12T15:08:52.123 回答