MySQL 中 STR_TO_DATE 函数返回 NULL:为何 "plan_start_time" 列为空?

最近在做数据库项目时,遇到了STR_TO_DATE函数返回NULL的问题。
当时我们公司有一个项目需要处理数据库中的计划开始时间字段,名为“plan_start_time”。
结果,许多查询遇到了 STR_TO_DATE 函数的问题,所有这些都返回 NULL。

我记得我曾经在查询中使用 STR_TO_DATE 来转换时间格式。
最初,Plan_start_time 是 2 4 小时,例如“1 5 :3 0:00”。
然而你设置的格式字符串是“%h:%i:%s”,是1 2 小时格式,结果当然返回NULL。
当时我脑子就晕了,赶紧查资料,结果发现格式不符。

我当时改变了格式字符串,替换为“%H:%i:%s”,现在正常了。
查询更改如下:
sql SELECT STR_TO_DATE('1 5 :3 0:00', '%H:%i:%s');
还有一次,我发现Plan_start_time中的一些数据的格式是“09 :00:AM”,这根本不是标准的2 4 小时格式。
在这种情况下,STR_TO_DATE 转换也会失败。
我必须手动检查数据并正确更改格式。

另一种情况是Plan_start_time的某些值为空,直接导致STR_TO_DATE返回NULL。
我当时使用了IFNULL函数来处理这个问题,并将一个默认时间“00:00:00”设置为NULL。


SELECT STR_TO_DATE(IFNULL(plan_start_time, '00:00:00'), '%H:%i:%s') FROM base_stop_calendar;
我还发现MySQL区域设置有时会影响STR_TO_DATE的解析。
我查了一下,原来我们的数据库配置中,间隔是一个句点“.”。
而不是冒号:“。
这样就导致时间格式分析出现一些错误。

最后,我也建议团队在入库之前先清理一下数据,避免出现这个问题。
还有,对于那些转换失败的记录,我建议单独保存一条记录,方便后续分析。

总之,这个STR_TO_DATE函数虽然强大,但是还是要谨慎使用,避免风险。
以后再遇到这种问题,我就有经验了,哈哈,希望大家能够避免以后使用这个功能时要少走弯路。

mysql中如何设置null

在MySQL中,NULL值的处理如下:
1 . Insert NULL:直接在INSERT语句中键入NULL,并且该列必须允许NULL。
2 . UPDATE NULL:使用UPDATE语句,条件列必须允许NULL。
3 .允许空列:ALTER TABLE修改列约束,或者在创建表时指定DEFAULT NULL。
4 .判断NULL:使用NULL或IS NOT NULL,不要使用=或!=。

注意:
NULL 操作的结果是 NULL。

COUNT() 包含 NULL,COUNT(column) 忽略 NULL。

谨慎使用 NULL 以避免歧义和算术错误。

mysql中null值的使用

嗯,说到MySQL中的NULL,这真的很有趣。
首先,您应该了解 NULL 不是空字符串或 0。
它的意思是“未知”或“无值”。
例如,如果用户没有输入电话号码,则可以存储 NULL,但如果输入空号码,则必须存储空字符串。
两者在语义上有很大不同。

那么,你应该知道NULL比较起来特别麻烦。
它不等于任何值,包括它本身。
因此,如果您使用那些传统的比较运算符,例如等于和不等于,它们将不起作用。
如果要查询电话号码为NULL的用户,不能使用WHERE Phone = NULL。
您应该使用 WHERE Phone IS NULL。

我们来谈谈NULL在运算和表达式中的表现,这个更好玩。
任何使用 NULL 的计算都会得到 NULL。
因此,当您编写 WHERE、HAVING 或 CASE 语句时,应特别注意 NULL 值,不要让它造成任何意外。

MySQL还提供了几个函数来帮助我们处理NULL值,例如IFNULL、COALESCE和NULLIF。
IFNULL函数,如果你指定的表达式为NULL,那么它返回你指定的默认值。
例如,如果要将 NULL 电话号码替换为“不可用”,则可以使用 IFNULL。

至于NULL对索引的影响,这个问题也要看情况。
B-Tree索引支持NULL值,但有时可能会降低查询效率,因为索引必须存储额外的NULL标签,并且索引可能无法用于范围查询。
唯一索引默认允许多个NULL值。
如果要限制唯一性,必须将列设置为不允许 NULL 或通过触发器进行限制。

说到实际的应用场景,还有很多。
例如,清理数据时,可以将无效或缺失值转换为NULL,以方便进一步处理。
另一个例子是条件聚合。
计算具有电话号码的用户数量时,必须排除 NULL 值。

不过,这个问题也并非毫无防范措施。
您应该避免隐式转换。
有时 MySQL 可以隐式地将 NULL 转换为其他值。
此外,更新 NULL 列可能会影响行锁定行为,因此您应该进行测试来确认。
关于JSON类型,在MySQL 5 .7 或更高版本中,JSON中的NULL和'null'是两个不同的东西,应该区分。

总之,NULL是一个很有学问的东西。
如果使用得当,它可以帮助您提高数据准确性和查询效率。
如果使用不当,就会很麻烦。