mysql 如何将文本数据类型字段转换为日期数据类型字段?(错误代码:1411年)

rxztt3cl  于 2022-11-21  发布在  Mysql
关注(0)|答案(2)|浏览(190)

我正试图将一个文本数据类型字段(星期几,如下所示)转换为日期数据类型字段。
| 日|
| - -|
| 星期五|
| 星期一|
| 星期六|
| 星期日|
| 星期四|
| 星期二|
| 星期三|
当我跑步时:

UPDATE toronto_transport
SET Day = str_to_date(Day, "%W");

我收到以下信息:错误代码:1411.不正确的日期时间值:函数str_to_date为'星期六'
我相信我遵循了MySQL 8.0参考手册第12.7节的正确约定。如果我错了,请纠正我,我显然在这里遗漏了一些东西。
解决此错误的步骤如上所述,并尝试"%w""%x"

wn9m85ua

wn9m85ua1#

可以使用case表达式:

update toronto_transport tt
set `Day` = case when `Day`='Sunday'     then 0
                 when `Day`='Monday'     then 1
                 when `Day`='Tuesday'    then 2
                 when `Day`='Wednesday'  then 3
                 when `Day`='Thursday'   then 4
                 when `Day`='Friday'     then 5
                 when `Day`='Saturday'   then 6
             end ;

https://dbfiddle.uk/Xs464MAJ

emeijp43

emeijp432#

这个问题相当有趣。
我尝试使用MySQL WorkBench重现您遇到的错误,但失败了。
第一次运行查询时

UPDATE toronto_transport
SET Day = str_to_date(Day, "%W");

我收到另一个错误:
错误代码: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到日期类型。我们确实需要具体的日期。
也许,你有另一个列或表涉及相应的具体日期。
如果你能把日期和这个问题联系起来,我们就能找到潜在的解决方案。

相关问题