Mysql 数据截断:截断的日期值错误
我使用的是MySQL版本:5.7.22 因此,我尝试创建一个包含string中的日期列的表。文本字段包含以下日期时间格式的数据Mysql 数据截断:截断的日期值错误,mysql,sql,database,Mysql,Sql,Database,我使用的是MySQL版本:5.7.22 因此,我尝试创建一个包含string中的日期列的表。文本字段包含以下日期时间格式的数据“d/m/YYYY h:m:s”格式。e、 g.“14/11/2018 20:10:04+00:00” 我想用以下格式的新列更改表“%Y-%m-%d”。我得到一份工作 数据截断:截断的日期值错误 当我尝试更新表时。但当我只使用select语句将字符串转换为日期时,就会得到结果 UPDATE BIG_DATA SET BIG_DATA.RealDate = ( SELECT
“d/m/YYYY h:m:s”
格式。e、 g.“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);
任何帮助都将不胜感激 出现错误的原因是,当您尝试执行
更新时,选择上的STR_TO_date
生成的错误日期值(该值中包含零)的警告将升级为错误。例如,如果你
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\u to\u date
提供字符串的日期部分(最左边的10个字符)来解决此问题:
SELECT STR_TO_DATE(LEFT('14/11/2018 20:10:04 +00:00', 10), '%d/%m/%Y');
SHOW WARNINGS
输出仅为2018-11-14
然后,您可以创建另一列,并从日期
列中更新它:
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
您可能要考虑的另一种可能性是使用:
在这两种情况下,输出都是
date realdate
14/11/2018 20:10:04 +00:00 2018-11-14
出现错误的原因是,当您尝试执行更新时,由SELECT
上的STR_TO_date
生成的错误日期值(该值中包含零)的警告将升级为错误。例如,如果你
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\u to\u date
提供字符串的日期部分(最左边的10个字符)来解决此问题:
SELECT STR_TO_DATE(LEFT('14/11/2018 20:10:04 +00:00', 10), '%d/%m/%Y');
SHOW WARNINGS
输出仅为2018-11-14
然后,您可以创建另一列,并从日期
列中更新它:
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
您可能要考虑的另一种可能性是使用:
在这两种情况下,输出都是
date realdate
14/11/2018 20:10:04 +00:00 2018-11-14
同一日期的不同格式没有多个列,您是否考虑过一个单独的列?我正在创建一个新列,只是因为我将来需要原始列。该新列是否可以是datetime
,以避免将来再次这样做?是否有理由使用嵌套查询3?另外,Realdate的数据类型是什么?如果是日期,则不需要将STR_to_date再次转换为字符串。是的datetime
格式适合我。与其为同一日期的不同格式设置多个列,您是否考虑过一个单独的列?我正在创建一个新列,只是因为我将来需要原始列。该新列是否可以是datetime
,以避免将来再次这样做?是否有理由使用嵌套查询3?另外,Realdate的数据类型是什么?如果它是一个日期,那么你不需要再将STR_to_date转换回字符串。是的datetime
格式适合我。