在数据库中,我有表'用户'列'生日'
这是我用来获取结果的SQL查询
SELECT *
FROM (`users`)
WHERE `birthday` between '12/11/1982' and '31/01/1983'
问题是我只获得1982年的记录?
请注意,1983年的记录存在。
这可能是什么问题?
答案 0 :(得分:2)
这只是Mark Byers的另一个答案。如果您的专栏birthday
的数据类型为varchar
且格式为dd/MM/yyyy
,请阅读此内容;否则,请从Mark Byer's读取。
您需要做的第一件事是使用DATE
将您的列转换为DATETIME
或STR_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'
日期和时间值可以用多种格式表示,例如带引号的字符串或数字,具体取决于值的确切类型和其他因素。例如,在MySQL期望日期的上下文中,它将'2015-07-21','20150721'和20150721中的任何一个解释为日期。
如果您使用varchar
类型,那么将日期放在第一位(数据和查询中)仍然有意义,因为在使用默认排序顺序时,您的日期将正确排序。