我正试图将一个文本数据类型字段(星期几,如下所示)转换为日期数据类型字段。
| 日|
| - -|
| 星期五|
| 星期一|
| 星期六|
| 星期日|
| 星期四|
| 星期二|
| 星期三|
当我跑步时:
UPDATE toronto_transport
SET Day = str_to_date(Day, "%W");
我收到以下信息:错误代码:1411.不正确的日期时间值:函数str_to_date为'星期六'
我相信我遵循了MySQL 8.0参考手册第12.7节的正确约定。如果我错了,请纠正我,我显然在这里遗漏了一些东西。
解决此错误的步骤如上所述,并尝试"%w"
和"%x"
。
2条答案
按热度按时间wn9m85ua1#
可以使用case表达式:
https://dbfiddle.uk/Xs464MAJ
emeijp432#
这个问题相当有趣。
我尝试使用MySQL WorkBench重现您遇到的错误,但失败了。
第一次运行查询时
我收到另一个错误:
错误代码:1175。您正在使用安全更新模式,并且您试图更新一个没有WHERE但使用KEY列的表。要禁用安全模式,请在“首选项”-〉“SQL编辑器”中切换该选项,然后重新连接。
禁用 * 安全更新 * 后,我重新连接,查询成功运行。
然而,运行结果并不符合预期,每个单元格的值都变成了
0000-00-00
。因为函数str_to_date
接受一个包含具体日期的字符串,如2019-03-02
,所以返回Date and Time Data Type
中的值2019-03-02 00:00:00
。在查询中,我们将一个没有具体日期的字符串weekday放入函数
str_to_date
中,该函数只返回一个零日期。让我们回到问题上来:
如果我的理解是正确的,您需要将
Monday
设置为Monday
,将Tuesday
设置为Tuesday
...,但类型为 * 日期和时间数据类型 *。不幸的是,没有函数可以帮助我们得到这一点。
@ErgestBasha提供的答案是一个选项,您需要注意,项目中的其他代码将周一或周日视为一周的第一天。
要得到一个固体转换从sting到日期类型。我们确实需要具体的日期。
也许,你有另一个列或表涉及相应的具体日期。
如果你能把日期和这个问题联系起来,我们就能找到潜在的解决方案。