mysql 日期转换 returns null 转换某些月份
mysql date conversion returns null converting certain months
我有这个查询(查看日期之间):
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 介于日期之间:
开始日期: (STR_TO_DATE('11/24/2020','%m/%d/% y'))
完成日期: (STR_TO_DATE('12/26/2021','%m/%d/% y'))
这个查询会 return 因为有 2020
年的记录
问题是当我更改完成日期的月份时,我尝试了:
完成日期: (STR_TO_DATE('1/26/2021','%m/%d/% y')) = null
完成日期: (STR_TO_DATE('01/26/2021','%m/%d/% y')) = null
完成日期: (STR_TO_DATE('10/26/2021','%m/%d/% y')) = null
这毫无意义...我正在使用 mysql 社区 8.0.20
您查询的问题是日期格式。小写 '%y'
匹配 两位数 年份。因此,只有 2021
中的前两个字符用于表示年份 -- 而您输入的年份错误。
但是,那不是真正的问题。你不需要 str_to_date()
。只需使用格式正确的日期文字。
假设日期正确存储为 date
数据类型,那么您可以简单地使用:
SELECT user_name, COUNT(*) AS COUNT
FROM user_records
WHERE date_created between '2020-11-24' and '2021-12-26'
GROUP BY user_name ;
如果 date_created
存储为字符串,则修复您的数据模型,使其成为 date
或 datetime
。日期不应存储为字符串。
由于问题只发生在 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
的问题。
********更新解决方案:
由于某些未知原因,即使插入正确的 DATE MYSQL FORMAT ("$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 ;
我有这个查询(查看日期之间):
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 介于日期之间:
开始日期: (STR_TO_DATE('11/24/2020','%m/%d/% y'))
完成日期: (STR_TO_DATE('12/26/2021','%m/%d/% y'))
这个查询会 return 因为有 2020
年的记录问题是当我更改完成日期的月份时,我尝试了:
完成日期: (STR_TO_DATE('1/26/2021','%m/%d/% y')) = null
完成日期: (STR_TO_DATE('01/26/2021','%m/%d/% y')) = null
完成日期: (STR_TO_DATE('10/26/2021','%m/%d/% y')) = null
这毫无意义...我正在使用 mysql 社区 8.0.20
您查询的问题是日期格式。小写 '%y'
匹配 两位数 年份。因此,只有 2021
中的前两个字符用于表示年份 -- 而您输入的年份错误。
但是,那不是真正的问题。你不需要 str_to_date()
。只需使用格式正确的日期文字。
假设日期正确存储为 date
数据类型,那么您可以简单地使用:
SELECT user_name, COUNT(*) AS COUNT
FROM user_records
WHERE date_created between '2020-11-24' and '2021-12-26'
GROUP BY user_name ;
如果 date_created
存储为字符串,则修复您的数据模型,使其成为 date
或 datetime
。日期不应存储为字符串。
由于问题只发生在 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
的问题。
********更新解决方案: 由于某些未知原因,即使插入正确的 DATE MYSQL FORMAT ("$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 ;