在数据库中,我有表用户,其中包含“生日”列
这是我用来获取结果的 sql 查询
SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'
问题是我只获得 1982 年的记录?
请注意,存在 1983 年的记录。
这里可能是什么问题?
这只是 Mark Byers 的另一个答案。如果您的列的数据类型birthday
是varchar
并且格式为dd/MM/yyyy
,请阅读此;否则,请阅读Mark Byer 的.
您需要做的第一件事是通过使用将列转换为DATE
或数据类型,DATETIME
STR_TO_DATE
SELECT *
FROM `users`
WHERE STR_TO_DATE(`birthday`,'%d/%m/%Y')
between '1982-01-12' and '1983-12-31'
来源
您应该在日期文字中将年份放在首位:
SELECT *
FROM `users`
WHERE `birthday` between '1982-11-12' AND '1983-01-31'
从文档中:
日期和时间值可以用多种格式表示,例如带引号的字符串或数字,具体取决于值的确切类型和其他因素。例如,在 MySQL 需要日期的上下文中,它会将 '2015-07-21'、'20150721' 和 20150721 中的任何一个解释为日期。
如果您使用的是varchar
类型,那么将日期放在首位(在数据和查询中)仍然有意义,因为这样您的日期将在使用默认排序顺序时正确排序。