1

我正在研究一个具有“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');

错误:

日期时间值不正确:函数 str_to_date 的“2005-08-06 15:57:00”

我也对以下查询进行了检查:

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'. 我不明白到底发生了什么。任何帮助表示赞赏.. 谢谢。

4

2 回答 2

2

你有

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

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

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

阿比韦

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

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

于 2012-09-06T18:19:39.000 回答
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');
于 2012-09-06T18:18:24.873 回答