mysql日期转换在转换某些月份时返回空值

mysql日期转换在转换某些月份时返回空值,mysql,sql,str-to-date,Mysql,Sql,Str To Date,我让此查询查看日期之间的情况: SELECT user_name, COUNT(*) AS 'COUNT' FROM user_records WHERE date_created between (STR_TO_DATE('11/24/2020','%m/%d/%y')) and (STR_TO_DATE('12/26/2021','%m/%d/%y')) GROUP BY user_name ; 选择的日期介于以下日期之间: SELECT user

我让此查询查看日期之间的情况:

SELECT user_name, COUNT(*) AS 'COUNT' 
FROM user_records 
WHERE date_created between (STR_TO_DATE('11/24/2020','%m/%d/%y'))  
                and (STR_TO_DATE('12/26/2021','%m/%d/%y')) 
GROUP BY user_name ;
选择的日期介于以下日期之间:

SELECT user_name, COUNT(*) AS 'COUNT' 
FROM user_records 
WHERE date_created between (STR_TO_DATE('11/24/2020','%m/%d/%y'))  
                and (STR_TO_DATE('12/26/2021','%m/%d/%y')) 
GROUP BY user_name ;
起始日期:截止日期'11/24/2020','%m/%d/%y'

完成日期:截止日期'12/26/2021','%m/%d/%y'

此查询将返回一些内容,因为存在2020年的记录

问题是,当我更改完成日期的月份时,我尝试了:

finishDate:STR_TO_DATE'1/26/2021','%m/%d/%y'=null

完成日期:截止日期'01/26/2021','%m/%d/%y'=null

finishDate:STR_TO_DATE'10/26/2021','%m/%d/%y'=null


这根本没有意义。。。我使用的是mysql社区8.0.20

查询的问题是日期格式。小写的“%y”匹配两位数的年份。因此,只有2021年的前两个字符用于年份,而您的年份是错误的

但是,这不是真正的问题。你不需要去约会。只需使用格式正确的日期文本

假设日期正确存储为日期数据类型,则您只需使用:

SELECT user_name, COUNT(*) AS COUNT
FROM user_records
WHERE date_created between '2020-11-24' and '2021-12-26'
GROUP BY user_name ;

如果创建的日期存储为字符串,则修复数据模型,使其成为日期或日期时间。日期不应存储为字符串。

因为问题只发生在finsihDate中,这可能会有所帮助

SELECT user_name, COUNT(*) AS 'COUNT' 
FROM user_records 
WHERE date_created between (STR_TO_DATE('11/24/2020','%m/%d/%y'))  
                and (DATE_ADD(STR_TO_DATE('11/24/2020','%m/%d/%y'), INTERVAL 367 DAY)) 
GROUP BY user_name ;
当然,您应该检查MySQL服务器日志中的相关错误或警告,这可以解释finsihDate的问题

********更新解决方案: 出于某种未知的原因,我的db IDE使用$DAY/$MONTH/$YEAR格式显示日期,即使插入正确的日期格式$YEAR-$MONTH-$DAY

我收到了以下警告:

这是最后一个有效的查询,但您的解决方案也有效:

SELECT user_name, COUNT(*) AS 'COUNT' 
FROM user_records 
WHERE date_created between '2020-11-24' AND '2021-01-24' 
GROUP BY user_name ;

创建的日期存储为日期类型,但我使用的顺序是“月/日/年”,这可能会弄乱查询?为什么要使用带文字日期的str\u to\u date,只需输入格式正确的日期YYYY MM dd最后一个str\u to\u DATEs都不返回空值。您的问题到底是什么?正如@forpas所说的,在这里可以正常工作。SHOW WARNINGS\G的输出是什么?您是否看到类似的内容,例如。。。级别:警告代码:1411消息:函数str_to_date的日期时间值“00/00/0000”不正确