将varchar转换为日期显示0000-00-00

时间:2013-07-24 04:51:40

标签: mysql

我正在尝试将我的列转换为DATE格式。 它目前在varchar中显示为:12/06/2013

我运行以下查询;

UPDATE dispatch
   SET dispatchdate = DATE_FORMAT(STR_TO_DATE(dispatchdate, '%d/%m/%Y'), '%d-%m-%Y');

ALTER TABLE dispatch
      CHANGE dispatchdate dispatchdate date;

但是在运行此查询后,它会将我的数据显示为:0000-00-00

我正在尝试更改它以便显示为DD-MM-YYYY 而不是YYYY-MM-DD

2 个答案:

答案 0 :(得分:0)

0000-00-00是mysql显示“零”或“虚拟”date的特殊方式。

像许多mysql的古怪,你学习如何使用它,我建议你:

UPDATE dispatch SET
dispatchdate = null
WHERE dispatchdate = '0000-00-00'

或设置为最适合您的价值。

答案 1 :(得分:0)

您必须构建一个临时列:您无法在适当的位置更改列的数据类型,并且希望保留数据。它只是赢了工作。

所以

  • 添加新的日期时间列,可能名为tmp_dispatchdate
  • 使用您编写的查询将日期时间值写入该列
  • 确认数据转换正确后,请删除dispatchdate
  • tmp_dispatchdate重命名为dispatchdate

如果您在相关桌面上有主键,则可以执行所有"中"如果您愿意,可以在临时表中使用PK来引用正确的记录。但是,您仍然需要删除一列并添加一列来执行您尝试执行的操作。