2016-02-12 52 views
-2

我在我的数据库中有一列,其日期传入格式如下: H:m:s,d.M.yyyy。 由于mysql无法将此格式作为日期解析,因此我不得不将此列的类型设置为字符串。 快速前进了几个月和几千条数据记录,现在我设法将传入数据格式更改为:yyyy-M-d H:m:s mysql可以将其解释为日期。如何转换日期字符串?

所以现在我想更改旧格式H:m:s,d.M.yyyy到4个不同表格中的新格式yyyy-M-d H:m:s。之后我这样做,我将只是改变字符串到日期的列的类型没有任何冲突

所以我试着为:

UPDATE myTable 
SET myColumn = REPLACE(myColumn , 'H:m:s,d.M.yyyy', 'yyyy-M-d H:m:s') 
WHERE myColumn LIKE '%H:m:s,d.M.yyyy%' 

但没有工作,我也那么想这一点,但我想我synthax熄灭:

UPDATE myTable的

SET myColumn = REPLACE(STR_TO_DATE(myColumn , 'H:m:s,d.M.yyyy', 'yyyy-M-d H:m:s')) 
WHERE myColumn LIKE '%H:m:s,d.M.yyyy%' 

Doesa任何人有任何建议或替代解决方案?

+2

见STR_TO_DATE - 但也许等几个月 – Strawberry

+0

看看这个。可能是其按您的要求http://stackoverflow.com/questions/5201383/how-to-convert-a-string-to -date-in-mysql –

+0

@用户试图选择它,我想要的是将其转换... – Vrankela

回答

1
  1. 将新的日期列添加到具有日期时间数据类型的表中。
  2. 更新与重新格式化的日期新列:

UPDATE myTable SET newdatecolumn=STR_TO_DATE(myColumn , '%H:%i:%s,%d.%M.%Y')

  • 检查所有日期是由在新列空值检查成功转换。这就是为什么你应该有一个新的专栏,没有转换到位。

  • 如果一切正常,然后删除带有文本日期的列并将新列重命名为旧名称。

  • 当您在该表中插入/更新日期时,修改插入/更新代码以使用str_to_date()

  • +0

    谢谢您花时间和实际帮助我解决问题,而不是嘲笑我缺乏知识:D 您的方法有意义,但由于以下原因,它不起作用'不正确的日期时间值:'8:0:0,25.12.2015'for function str_to_date' 我甚至尝试将您从'%H:%i:%s,%d。%M.%Y'写入的格式转换为'% H:%m:%s,%d。%M.%yyyy'仍然没有运气:( – Vrankela

    +0

    这不是年份与模式不一致,而是时间部分和月份。 .mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format对于要使用的格式字符串,您没有时间上的前导0,可能甚至不是日期。可以看到你自己的数据,查看一下 – Shadow

    +0

    再次非常感谢你的帮助。 e你:) 我的最终格式是:'%k:%i:%s,%e。%c。%Y' – Vrankela