我正在开发一个数据库,其日期字段的格式为'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'
工作正常。我不明白究竟发生了什么。任何帮助表示赞赏..谢谢。
答案 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');