【问题标题】:Mysql Incorrect date format while insertingMysql插入时日期格式不正确
【发布时间】: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

标签: mysql sql database


【解决方案1】:
  1. paid_date 是 Varchar(50)
  2. 您已为paid_date 插入 dweadwaed'

选择列表包含支付日期的这个值所以错误

【讨论】:

  • 。 .如果您查看 Fiddle,您会看到有问题的列都是字符串。日期转换发生在“中间”,您的回答与这个问题根本无关。
猜你喜欢
  • 1970-01-01
  • 2019-12-13
  • 2018-02-26
  • 2018-04-03
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多