Правильный формат дня рождения в MySQL для всех пользователей в таблице

#mysql

#mysql

Вопрос:

Я допустил ошибку в последнем обновлении своего кода,

В первый раз я прошу пользователей указать формат даты, например 1999-05-21

Затем во второй раз я изменил формат на 21-05-1999

Теперь проблема в том, что скрипт работает только для пользователей формата 1999-05-21 (ГГГГ-ММ-ДД), но есть много пользователей, которые зарегистрировались с неправильным именем, как исправить день рождения всех пользователей в базе данных MySQL

Есть ли способ изменить эту последовательность? На сервере или путем экспорта БД на локальном компьютере или любом программном обеспечении?

Комментарии:

1. Вы должны хранить дату как даты, а не строки.

2. @Shadow Я думаю, что старый разработчик хранит как строку, потому что он может поддерживать различные типы форматов, такие как 10-12-1999 и 10-Dec-1999 и 1999-12-10 из-за использования API

3. Вы, кажется, говорите, что вообще нет правил для принятия даты, если это так, то простого способа сделать это нет, вам нужно протестировать все известные варианты и вручную изменить странности.

Ответ №1:

Вы можете проанализировать их как даты с помощью STR_TO_DATE(str,format)
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date

Например.

 > SELECT (STR_TO_DATE("21-05-1999", "%d-%m-%Y"))
"1999-05-21"
  

Это должно позволить вам обновить все строки, которые анализируются на сегодняшний день, с помощью этого формата для исправления дат

 UPDATE birthdays SET birthday = STR_TO_DATE(birthday, "%d-%m-%Y")
  WHERE STR_TO_DATE(birthday, "%d-%m-%Y") IS NOT NULL;
  

Комментарии:

1. Я использовал эту команду UPDATE users SET birthday = STR_TO_DATE(birthday, "%Y-%m-%d") WHERE STR_TO_DATE(birthday, "%d-%m-%Y") IS NOT NULL; , но она заменяет 26-05-1974 на 2026-05-19 есть идеи, почему?

2. По какой-то причине вы изменили формат при установке нового дня рождения "%Y-%m-%d" . Это должно быть "%d-%m-%Y" , потому что это формат, из которого вы анализируете.

3. Это не поможет, если у вас уже есть смешанные записи в вашей базе данных

Ответ №2:

 UPDATE users SET birthday = CONCAT(SUBSTR(birthday, 7, 4),'-',SUBSTR(birthday, 4, 2),'-',SUBSTR(birthday, 1,2) WHERE SUBSTR(birthday, 3,1) = '-'
  

и после этого вы должны изменить формат столбца на

 ALTER TABLE user MODIFY COLUMN birthday DATE