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字段转换为datetime格式?_Mysql_Sql_Datetime_Sql Update_Date Format - Fatal编程技术网

是否可以将具有无效微秒值的mysql字段转换为datetime格式?

是否可以将具有无效微秒值的mysql字段转换为datetime格式?,mysql,sql,datetime,sql-update,date-format,Mysql,Sql,Datetime,Sql Update,Date Format,我有一个从csv文件导入的表。但是,日期字段的格式不好 是否可以使用mysqlSTR\u to\u DATE函数将此字符串转换为日期 我需要将此'05/11/2009 16:07:53:052'转换为日期时间格式,如'2009-05-11 16:07:53',并忽略microsecs 我试过用这样的东西 UPDATE mytable SET updated_on = DATE(STR_TO_DATE(updated_on, '%Y-%m-%d %H:%i:%s')) 及 但是运气不好,请帮忙

我有一个从csv文件导入的表。但是,日期字段的格式不好

是否可以使用mysqlSTR\u to\u DATE函数将此字符串转换为日期

我需要将此
'05/11/2009 16:07:53:052'
转换为日期时间格式,如
'2009-05-11 16:07:53'
,并忽略microsecs

我试过用这样的东西

UPDATE mytable
SET updated_on = DATE(STR_TO_DATE(updated_on, '%Y-%m-%d %H:%i:%s'))

但是运气不好,请帮忙

谢谢检查功能

试试这个:

如果日期格式为
mm/dd/yyyy hh:mm:ss:sss
,则

UPDATE mytable SET updated_on = STR_TO_DATE(updated_on, '%m/%d/%Y %H:%i:%s');
UPDATE mytable SET updated_on = STR_TO_DATE(updated_on, '%d/%m/%Y %H:%i:%s');
如果日期格式为
dd/mm/yyyy hh:mm:ss:sss
,则

UPDATE mytable SET updated_on = STR_TO_DATE(updated_on, '%m/%d/%Y %H:%i:%s');
UPDATE mytable SET updated_on = STR_TO_DATE(updated_on, '%d/%m/%Y %H:%i:%s');

这是DATE_FORMAT()函数的逆函数。它采用字符串str和格式字符串格式。如果格式字符串同时包含日期和时间部分,则STR_TO_DATE()返回日期时间值;如果格式字符串仅包含日期或时间部分,则返回日期或时间值。如果从str提取的日期、时间或日期时间值非法,str_TO_date()将返回NULL并产生警告

服务器扫描str,试图将格式与之匹配。格式字符串可以包含以%开头的文字字符和格式说明符。格式中的文字字符必须与str中的文字字符匹配。格式中的格式说明符必须与str中的日期或时间部分匹配

UPDATE mytable SET updated_on = STR_TO_DATE(updated_on, '%m/%d/%Y %H:%i:%s')

您需要适当的符号来表示
微秒
。它是
%f

mysql> select str_to_date( '05/11/2009 16:07:53:052', '%d/%m/%Y %H:%i:%s:%f' );
+------------------------------------------------------------------+
| str_to_date( '05/11/2009 16:07:53:052', '%d/%m/%Y %H:%i:%s:%f' ) |
+------------------------------------------------------------------+
| 2009-11-05 16:07:53.052000                                       |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
您可以省略时间格式部分,只是为了返回日期部分,但会在数据截断时发出警告

mysql> select str_to_date( '05/11/2009 16:07:53:052', '%d/%m/%Y' );
+------------------------------------------------------+
| str_to_date( '05/11/2009 16:07:53:052', '%d/%m/%Y' ) |
+------------------------------------------------------+
| 2009-11-05                                           |
+------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------------+
| Level   | Code | Message                                                   |
+---------+------+-----------------------------------------------------------+
| Warning | 1292 | Truncated incorrect date value: '05/11/2009 16:07:53:052' |
+---------+------+-----------------------------------------------------------+
1 row in set (0.00 sec)
请参阅


  • 是的,你可以。。。不需要我们的许可,我只是试了一下。它可以工作,但并非所有记录都已正确更新。。其他一些记录将updated_on字段更新为null,就像我说的从csv导入的数据包含无效的微秒值,并且格式不正确。。我认为这就是STR_TO_DATE在执行时返回空值的原因。。此字符串示例“23/09/2013 17:30:26:899”特别返回空值。。有没有办法或者可以忽略从最后一个分号(:899)开始的最后一部分?我在发帖之前已经试过了。。而且它不起作用。。该函数返回一个空值,导致所有记录全部消失null@JasonD我试过了,它起作用了。您能否解释一下,在何种情况下,查询会将记录更新为
    NULL
    此字符串示例“23/09/2013 17:30:26:899”特别返回NULLvalue@JasonD此日期的格式与您指定的格式不同。您之前给出的格式是
    mm/dd/yyyy hh:mm:ss.sss
    ,现在给出的格式是
    dd/mm/yyyy hh:mm:ss.sss
    。请明确表中存储日期的格式。给我更新的列的实际格式这些是前10个数据示例:“25/09/2013 14:30:26:995”,“01/02/2013 08:30:45:958”,“23/09/2013 13:30:26:744”,“25/03/2013 10:30:24:123”,“30/08/2013 19:30:25:813”,“01/09/2013 14:30:25:847”,“22/09/2013 11:30:28:064”,“01/02/2013 08:30:45:958”,“01/05:728”,'05/09/2013 17:30:25:024'请注意微秒是:和,不是。谢谢你的提示。。然而,我试图在这里实现的是在没有毫秒的情况下更新整个表。。您可以用update语句重写上面的sql吗?先谢谢你。