2013-07-24 2 views
1

Я пытаюсь преобразовать свою колонку в формат DATE. В настоящее время он находится в varchar и отображается как: 12/06/2013Преобразование данных на varchar 0000-00-00

Запускаю следующий запрос;

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

+1

ГГГГ-ММ-ДД - это то, как MySQL отображает дату. Он не предназначен для эстетических целей, он должен быть функциональным. – BLaZuRE

ответ

0

0000-00-00 - это специальный способ отображения «нулевого» или «фиктивного» метода mysql date.

Как и многие другие странности MySQL, вы научитесь жить с ним, и я предлагаю вам:

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

Или установить на любое значение, лучше всего работает для вас.

0

Вам нужно будет создать столбец с царапинами: вы не можете изменить тип данных столбца на месте и ожидать сохранения данных. Это просто не сработает.

Так

  • Добавить новый столбец DATETIME, может быть именем tmp_dispatchdate
  • Используйте запрос, вы написали, чтобы написать значения даты и времени в этот столбец
  • После подтверждения того, что данные преобразуются правильно, падение dispatchdate
  • Rename tmp_dispatchdate в dispatchdate

Если у вас есть первичный ключ в рассматриваемой таблице, вы можете выполнить всю «среднюю» работу в таблице темп, если хотите, используя PK для ссылки на нужную запись. Но вам все равно придется отбросить столбец и добавить столбец, чтобы делать то, что вы пытаетесь сделать.

Смежные вопросы