MySQL - Как изменить формат даты с дд-мм-гг на гг-мм-дд? - PullRequest
1 голос
/ 24 марта 2012

У меня есть некоторые даты в моей БД в формате дд-мм-гг, а некоторые в гг-мм-дд

Я хочу, чтобы они были в гг-мм-дд

Они хранятся в полях VARCHAR

Примеры дат:

2011-10-19 и 19-10-2011

Есть ли запрос для обновления на любой, который не в этом формате?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Даты хранятся в виде дат, возможно, у вас есть строки.

Если они уже являются датами, просто используйте DATE_FORMAT при необходимости.

Если они являются строками, лучшим вариантом будетна измените их на фактические даты и сохраните значение даты в новом столбце.В противном случае, в будущем у вас останется много проблем, как заметил Тони (+1 Тони!).

Затем вы можете заполнить его STR_TO_DATE, например

update tbl set new_date_field =
select STR_TO_DATE(string_date_field,'%y-%m-%d') ` # if string_date_field is '2011-01-01'
WHERE string_date_field RLIKE "^[0-9]{2}-";

Если у вас есть реальная дата, вы можете отобразить ее с помощью DATE_FORMAT(date_field, '%y-%m-%d')

Единственный другой вариант, если вы не можете добавить поле, - это манипулирование строками, т.е.
Update table set date_field =<br> substr(string_date_field,7,2) + '-' + substr(string_date_field,3,2) + '-' + substr(string_date_field,0,2) WHERE string_date_field RLIKE "^[0-9]{2}-";
даже так я бы порекомендовал новое поле.

Примечание: если вам нужно сделать это еще большим количеством шагов, скажите, что вы не можете изменить заполнение поля «дата как строка» сразу, как могли бытакже добавьте триггер пост-вставки / обновления поста (который теперь поддерживает mySQL), чтобы выполнить преобразование (из строкового поля в поле реальной даты) в будущем.

2 голосов
/ 24 марта 2012

Вы можете попробовать что-то вроде этого (но сначала сделайте резервную копию таблицы!):

UPDATE table SET string_date_field = STR_TO_DATE(string_date_field, "%d-%m-%Y")
WHERE string_date_field RLIKE "^[0-9]{2}-";

RLIKE является синонимом REGEXP, и вы можете использовать его, чтобы найти записи с датой в проблемном формате% d-% m-% Y. После этого вы можете изменить таблицу так, чтобы тип поля был DATE. Кроме того, если ваша таблица содержит большое количество записей, возможно, вам следует делать это через определенные промежутки времени, используя непрерывное поле автоинкремента (при условии, что оно существует, конечно же!) Для создания меньших наборов записей для обработки сервером. Например:

UPDATE table SET string_date_field = STR_TO_DATE(string_date_field, "%d-%m-%Y")
WHERE ID >= 1000000 AND ID < 2000000 AND string_date_field RLIKE "^[0-9]{2}-";
...