我正在使用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);
任何帮助将不胜感激!
答案 0 :(得分:2)
出现错误的原因是STR_TO_DATE
在SELECT
上产生的日期值错误警告(一个日期中的值产生零)。尝试执行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