MySQL - объединение трех столбцов в один с определенным форматированием

В моей таблице MySQL DB у меня есть столбец StartDate (типа varchar) плюс три отдельных целочисленных столбца; День месяц год.

Я хочу объединить значения дня, месяца и года и вставить полученное значение в поле StartDate в формате дд/мм/гг (например, 03/07/84).

Это было бы не слишком сложно, но многие значения дня и месяца состоят только из одной цифры, поэтому они должны иметь префикс 0 (например, 1 становится 01, 9 становится 09, 11 остается неизменным), чтобы соответствовать требуется форматирование StartDate.

Другая проблема — поле «Год». В настоящее время он содержит 4 цифры года, поэтому первые 2 цифры необходимо удалить, чтобы соответствовать форматированию StartDate (например, 1984 становится 84, 2001 становится 01).

Может ли кто-нибудь помочь разработать процедуру, которую мне нужно пройти, чтобы достичь этого. Я предполагаю, что мне нужно сначала поработать со столбцами «День», «Месяц» и «Год», чтобы получить их в правильном форматировании, а затем скопировать их и добавить символы «/» в столбец StartDate.

Заранее большое спасибо за помощь и помощь.


person tcarnell    schedule 17.03.2012    source источник
comment
Зачем ты это делаешь? Иметь данные в двух местах — плохая идея. Лучше написать в коде приложения функцию, которая преобразует имеющиеся у вас данные в нужный формат по мере их выхода. Кроме того, почему бы не использовать формат MySQL DATE?   -  person Matt Gibson    schedule 17.03.2012
comment
@MattGibson Я согласен, что иметь данные в двух местах плохо, поэтому я создаю StartDate из столбцов Day, Month и Year, а затем удаляю их, чтобы оставить StartDate. Я не использую формат MySQL DATE из-за того, как содержимое поля StartDate будет использоваться во внешнем интерфейсе сайта.   -  person tcarnell    schedule 18.03.2012


Ответы (1)


Попробуйте этот запрос:

UPDATE `my_super_datestable` SET startdate = 
    date_format(str_to_date(concat_ws(
                          '/', `day`, `month`, `year`), '%e/%c/%Y'), '%d/%m/%y');
person mantigatos    schedule 17.03.2012
comment
Это блестяще. Это прекрасно выполнило то, что я пытался сделать, и избавило меня от необходимости печатать! Большое спасибо @mantigatos. - person tcarnell; 18.03.2012