2016-03-24 2 views
1

Прежде всего, использование любого другого языка программирования не допускается.Вставка даты в формате mdY с использованием чистого MYSQL

Рассмотрите дату, подходящую в форме строки mdY, например. 1252016 (кроме того, что ведущий месяц может быть длиной характера 1 или 2) является 25 января 2016 года, как 10252016 является 25 2016.

октября В любом случае, мы хотели бы подстроку месяца либо как: SUBSTRING("1252016" , 1, 1); => 1 или SUBSTRING("10252016" , 1, 2); => 10.

Например:

CONCAT_WS("-", 
    SUBSTRING("1252016" , -4, 4) , 
    SUBSTRING("1252016" , 1, 1) , 
    SUBSTRING("1252016" , -6, 2) 
); => "2016-1-25" 

Есть ли способ условно получить 1 или 2 символов с начала строки, или иным образом читать негативно из 7 позиции в начале строки, и ОБРАТИТЬ это?

Причина, по которой использование другого языка программирования не может быть использовано, связано с количеством импортируемых дат через LOAD DATA LOCAL INFILE. И насколько я понимаю, я могу контролировать структуру запроса.

+2

Что бы правильный результат для '1112016'? 11/1/2016 или 1/11/2016? –

+0

@JoachimIsaksson он просто должен вставить как правильную 'DATE' в базу данных. Независимо от того, начинается ли формат с «mdY» или «dmY», не имеет значения, поскольку любой из них имеет потенциал для того, чтобы ведущий «d/m» был как 1 или 2 в длине символа. – Jonathan

+0

@JoachimIsaksson правильный. Формат даты по своей сути неоднозначен во многих случаях, когда у вас есть семизначное число. Усилия по импорту данных, как указано в настоящее время, не удастся. Если вы можете получить источник данных для записи '12052016' за 5 декабря 2016 года и' 01252016' за 25 января 2016 года, у вас будет шанс на эту работу. Но если вы получите '1252016', вы просто не можете различить разницу между ними. –

ответ

3

подушечка строка с ведущим нулем, а затем использовать STR_TO_DATE функцию:

SELECT STR_TO_DATE(LPAD('1252016', 8, '0'), '%m%d%Y'); 
+0

Ницца, спасибо! – Jonathan