Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据截断:截断的日期值错误_Mysql_Sql_Database - Fatal编程技术网

Mysql 数据截断:截断的日期值错误

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

我使用的是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 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
格式适合我。