mysql日期转换返回null转换某些月份

Posted

技术标签:

【中文标题】mysql日期转换返回null转换某些月份【英文标题】:mysql date conversion returns null converting certain months 【发布时间】:2021-03-15 18:24:21 【问题描述】:

我有这个查询(看看日期之间):

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 ;

选择是在日期之间:

开始日期: (STR_TO_DATE('11/24/2020','%m/%d/%y'))

finishDate: (STR_TO_DATE('12/26/2021','%m/%d/%y'))

此查询将返回一些内容,因为在 2020

年有记录

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

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

finishDate: (STR_TO_DATE('01/26/2021','%m/%d/%y')) = null

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

这毫无意义...我使用的是 mysql community 8.0.20

【问题讨论】:

你为什么用str_to_date()和文字日期,只要输入正确格式的日期YYYY-MM-DD 最后一个 STR_TO_DATE 都没有返回 NULL。你到底是什么问题? 同上@forpas 所说的,在这里工作正常 SHOW WARNINGS\G 的输出是什么? 你有没有看到类似的东西……Level: Warning Code: 1411 Message: Incorrect datetime value: '00/00/0000' for function str_to_date 【参考方案1】:

由于问题仅出现在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 ;

【讨论】:

【参考方案2】:

您的查询的问题在于日期格式。小写 '%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 存储为字符串,则修复您的数据模型,使其为datedatetime。日期不应存储为字符串。

【讨论】:

date_created 存储为“DATE”类型,但我使用的是“月/日/年”顺序,这可能会弄乱查询?

以上是关于mysql日期转换返回null转换某些月份的主要内容,如果未能解决你的问题,请参考以下文章

mysql中日期转换

将 DatePicker 日期转换为 UTC 格式返回 NULL

在 Databricks SQL 中将字符串转换为日期返回 null

如何在java中将月份转换为确切的天数

将 bigint 转换为日期(月份名称)

在Python里 请问怎么将数字日期转换成英文月份加数字日期? 并且替换分隔符?例子如下