1292 截断了不正确的日期值:'05/18/2011'

1292 Truncated incorrect date value: '05/18/2011'

我正在尝试将所有值都存储为 VARCHAR 的数据库转换为正确的列类型,例如:INT、DATE、DECIMAL 等...

问题是,date_orderdate_billeddate_paid 列以不同的格式存储

我仍然收到 1292 Truncated incorrect date value: '05/18/2011' 错误并且几乎不知道该怎么做,因为确切的日期格式被列为 CASE

我的代码:

SELECT 
      CAST(`ar_no` AS UNSIGNED), 
      CAST(`accession_id` AS UNSIGNED), 
      CAST(`client_id` AS UNSIGNED), 
      CAST(`insurance_id` AS UNSIGNED), 
      CAST(`test_id` AS UNSIGNED), 

CASE 
     WHEN `date_paid` = '0' THEN `date_paid` = '00/00/0000'
     WHEN LENGTH(DATE(STR_TO_DATE(`date_order`, '%m/%d/%y'))) IS NOT NULL THEN STR_TO_DATE(`date_order`, '%m/%d/%y') 
     WHEN LENGTH(DATE(STR_TO_DATE(`date_order`, '%m/%d/%Y'))) IS NOT NULL THEN STR_TO_DATE(`date_order`, '%m/%d/%Y')
END,

CASE 
     WHEN `date_paid` = '0' THEN `date_paid` = '00/00/0000'
     WHEN LENGTH(DATE(STR_TO_DATE(`date_billed`, '%m/%d/%y'))) IS NOT NULL THEN STR_TO_DATE(`date_billed`, '%m/%d/%y') 
     WHEN LENGTH(DATE(STR_TO_DATE(`date_billed`, '%m/%d/%Y'))) IS NOT NULL THEN STR_TO_DATE(`date_billed`, '%m/%d/%Y')
END,

CASE 
     WHEN `date_paid` = '0' THEN `date_paid` = '00/00/0000'
     WHEN LENGTH(DATE(STR_TO_DATE(`date_paid`, '%m/%d/%y'))) IS NOT NULL THEN STR_TO_DATE(`date_paid`, '%m/%d/%y') 
     WHEN LENGTH(DATE(STR_TO_DATE(`date_paid`, '%m/%d/%Y'))) IS NOT NULL THEN STR_TO_DATE(`date_paid`, '%m/%d/%Y')
END,

CAST(`amount_billed` AS DECIMAL(15,2)),
CAST(`amount_received` AS DECIMAL(15,2)),
CAST(`amount_adjusted` AS DECIMAL(15,2))

FROM `acs`.`billing_unformatted`;

Mysql 仅 YYYY-MM-DD 格式的日期除外。这就是为什么您会收到诸如 1292 Truncated incorrect date value: '05/18/2011'

之类的错误的原因

您可以在导入之前在 Excel 中更改此设置。

要更改 excel 中的日期格式:右键单击顶部单元格。从下拉列表中选择 format cells。将 local 更改为 'Afrikans' 之类的内容。选择类似于 2001-03-14 的格式。使用顶部单元格 fill down。然后保存文档。

快速说明:Excel 有时会尝试做太多事情,并且会将此列恢复为 English(U.S) 默认时区。因此,如果您打算进行更多编辑,请确保该列没有还原。

这里是 link dev.mysql 上的更多字符串文字。

此存储过程和 post 也可能对您有所帮助:Error code 1292