【发布时间】:2021-09-30 00:26:37
【问题描述】:
在尝试向表中插入一些数据时,我遇到了这个错误。 Incorrect datetime value: 'dweadwaed' for function str_to_date。
我正在使用INSERT INTO .. SELECT 方法来做到这一点。 SELECT 查询工作正常,但是当我将它与插入查询结合使用时,发生了错误。
SELECT id,'INVALID_DATE' FROM invoice WHERE STR_TO_DATE(paid_date, '%Y-%m-%d') IS NULL
此查询返回第 1,3 行。
并且这 3 行应该已使用以下查询插入到 validation 表中。但它显示错误。
INSERT INTO validation(invoice_id,validation_message)
SELECT id,'INVALID_DATE' FROM invoice WHERE STR_TO_DATE(paid_date, '%Y-%m-%d') IS NULL
基本上选择查询是相同的,我也没有尝试将任何日期字段插入数据库。
谁能解释一下Mysql这种行为的原因。
我为 2 个表添加了 SQL Fiddle
我们正在尝试从外部应用程序迁移数据。所以我们不能改变现有的数据库结构。相反,我们正在尝试识别和纠正他们的无效日期。
【问题讨论】:
-
这看起来像是一个(相当神秘的)MySQL 错误。
-
我强烈建议您不要将日期存储为
VARCHAR。使用正确的DATE数据类型来解决所有这些问题。 -
@TheImpaler 我们正在尝试从外部应用程序迁移数据。我们无法更改现有的数据库结构。相反,我们正在尝试识别和纠正他们的无效数据。
-
@GordonLinoff 是否有任何解决方法。或者我们可以识别字符串是否为有效日期的任何其他方法。
-
由于日期将始终采用 YYYY-MM-DD 格式,因此我正在考虑使用 REGEX 来识别不正确的数据。但仍然需要识别错误的日期,例如 0001-12-12