MySQL - Комбиниране на три колони в една със специфично форматиране

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

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

Това не би било твърде трудно, но много от стойностите за ден и месец са дълги само една цифра, така че те трябва да бъдат с префикс 0 (напр. 1 става 01, 9 става 09, 11 остава непроменено), за да отговарят на необходимо форматиране на начална дата.

Другият проблем е полето Година. Понастоящем това съдържа 4-цифрена година, така че първите 2 цифри трябва да бъдат изтрити, за да отговарят на форматирането на началната дата (напр. 1984 става 84, 2001 става 01).

Може ли някой да ми помогне да разработя процедурата, през която трябва да премина, за да постигна това. Предполагам, че първо трябва да работя върху колоните Ден, Месец и Година, за да ги приведа в правилното форматиране, преди след това да ги копирам и да добавя символите „/“ в колоната Начална дата.

Благодаря много предварително за цялата помощ и съдействие.


person tcarnell    schedule 17.03.2012    source източник
comment
Защо правиш това? Да имате данни на две места е лоша идея. По-добре е да напишете функция в кода на вашето приложение, която превръща данните, които имате, в правилния формат, когато излизат. Също така, защо не използвате MySQL формата DATE?   -  person Matt Gibson    schedule 17.03.2012
comment
@MattGibson Съгласен съм, че наличието на данни на две места е лошо, затова създавам началната дата от колоните ден, месец и година, след което ще ги изтрия, за да оставя начална дата. Не използвам формата 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