使用mysql查询将日期从'yyyy-dd-mm'转换为'yyyy-mm-dd'

时间:2012-09-06 18:11:23

标签: mysql database

我正在开发一个数据库,其日期字段的格式为'yyyy-dd-mm hh:mm',我使用STR_TO_DATE将字段更改为'yyyy-mm-dd hh:mm'但是它回馈了错误。

查询:

UPDATE transaction 
SET time_creation = STR_TO_DATE(time_creation, '%Y-%m-%d %H:%i');

错误:

  

日期时间值不正确:'2005-08-06 15:57:00'功能str_to_date

我也检查了以下查询:

SELECT 
   time_creation, 
   STR_TO_DATE(time_creation,'%Y-%m-%d %H:%i') AS DATE_FORMATTED 
FROM transaction;

并在DATE_FORMATTED列中为日期值获取NULL,例如 '2007-22-11 15:32''2007-09-11 13:12'工作正常。我不明白究竟发生了什么。任何帮助表示赞赏..谢谢。

2 个答案:

答案 0 :(得分:2)

你有

STR_TO_DATE(time_creation,'%Y-%m-%d %H:%i')

你给'2007-22-11 15:32',这意味着'yyyy- dd - * mm * hh:mm'。

Sql正在尝试解析包含数字22的日期作为月份...

Abyway

SELECT STR_TO_DATE('2005-08-06 15:57:00', '%Y-%m-%d %H:%i');

在我的mysql服务器上正常工作。

答案 1 :(得分:1)

首先,您需要与我们共享表定义。听起来time_creation字段的列类型是VARCHAR而不是DATETIME。所以你真的不应该试着把结果存回到同一个领域。您希望将其保存到有效的DATETIME字段中,以便内部列类型正确。

其次,听起来您的某些值存储为YYYY-DD-MM,而某些值则存储为YYYY-MM-DD。是这样的吗?如果是,则需要更多逻辑才能区分已经正确的值和不正确的值。然而,如果它们混合在一起,你会有点挑剔,因为你怎么知道解释2012-01-03的正确方法?

编辑:

创建一个新的DATETIME字段(例如我只使用new_time_creation)并像这样更新:

UPDATE transaction SET new_time_creation = STR_TO_DATE(time_creation, '%Y-%d-%m %H:%i');