数据截断:截断了不正确的日期值错误

时间:2019-11-20 04:09:53

标签: mysql sql database

我正在使用MySQL版本:5.7.22

因此,我尝试使用一个包含字符串日期列的表。文本字段包含以下DateTime格式"d/m/YYYY h:m:s"格式的数据。例如"14/11/2018 20:10:04 +00:00"

我想用具有以下格式'%Y-%m-%d'的新列来更改表。我得到一个

  

数据截断:截断了不正确的日期值错误

当我尝试更新表时。但是当我仅使用select语句将字符串从日期转换为日期时,就会得到结果。

UPDATE BIG_DATA SET BIG_DATA.RealDate = ( SELECT x.d
                                          From (SELECT (DATE_FORMAT(STR_TO_DATE(BIG_DATA.Date , '%d/%m/%Y'), '%Y-%m-%d')) as d
                                          FROM BIG_DATA) as x);

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

出现错误的原因是STR_TO_DATESELECT上产生的日期值错误警告(一个日期中的值产生零)。尝试执行UPDATE时发生错误。例如,如果您这样做

SELECT STR_TO_DATE('14/11/2018 20:10:04 +00:00', '%d/%m/%Y');
SHOW WARNINGS

您的输出将是:

2018-11-14
Warning     1292    Truncated incorrect date value: '14/11/2018 20:10:04 +00:00'

您可以通过仅 STR_TO_DATE提供字符串的日期部分(最左边的10个字符)来解决此问题:

SELECT STR_TO_DATE(LEFT('14/11/2018 20:10:04 +00:00', 10), '%d/%m/%Y');
SHOW WARNINGS

输出就是2018-11-14

然后,您可以创建自己的其他列,并从UPDATE列中date

ALTER TABLE big_data ADD
realdate DATE;
UPDATE big_data
SET realdate = STR_TO_DATE(LEFT(date, 10), '%d/%m/%Y');
SELECT * FROM big_data

您可能要考虑的另一种可能性是使用generated column

ALTER TABLE big_data ADD
realdate DATE AS (STR_TO_DATE(date, '%d/%m/%Y'));
SELECT * FROM big_data

在两种情况下,输出均为

date                        realdate
14/11/2018 20:10:04 +00:00  2018-11-14 

Demo on dbfiddle

相关问题