2013-09-03 2 views
9

есть функция mySQL для преобразования даты из формата dd.mm.yy в YYYY-MM-DD?Формат даты в формате SQL? [dd.mm.yy to YYYY-MM-DD]

например, 03.09.13 -> 2013-09-03.

+1

Является ли ваш ввод типа даты, или это строка, буквально '03.09.13'? –

+0

@ ppeterka66 Да, и спрашивать здесь, вероятно, означает, что я не нашел/понял ответ для этого. – user2216190

+0

@EdGibbs это строка. – user2216190

ответ

29

Поскольку ваш вклад является строка в виде 03.09.13, я буду считать (так как сегодня 3 сентября 2013), что это дд-мм-гггг. Вы можете преобразовать его в дату, используя STR_TO_DATE:

STR_TO_DATE(myVal, '%d.%m.%y') 

Затем вы можете отформатировать его обратно в строку, используя DATE_FORMAT:

DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%y'), '%Y-%m-%d') 

Обратите внимание, что год %y (в нижнем регистре «у») в STR_TO_DATE и %Y (верхний регистр «Y») в DATE_FORMAT. В нижнем регистре для двухзначных лет, а в верхнем регистре - четырехзначные годы.

+2

DATE_FORMAT (STR_TO_DATE (myVal,'% d.% M.% Y '),'% Y-% m-% d ') Y - заглавная буква –

+0

Rajavel - это строчная буква 'y' в первом, потому что входная строка имеет 2-значный год (' 03.09.13'). Во втором - верхний регистр, поэтому выход будет 4-значным годом ('2013-09-03'). –

+0

Спасибо, что помогли мне понять .. –

4

Использование

SELECT CONCAT(
'20', 
SUBSTR('03.09.13', 7, 2), 
'-', 
SUBSTR('03.09.13', 4, 2), 
'-', 
SUBSTR('03.09.13', 1, 2)) 

скрипку demo.

Подробнее о форматах, которые вы можете прочитать в соответствующем manual page. Совет: если речь идет о значении преобразования из поля не-datetime, лучше использовать тип данных DATE/DATETIME. Однако это плохая идея для работы с датами через строковые функции. Вверху есть хороший трюк с STR_TO_DATE (не будет повторяться этот код, обновляется до соответствия лучше)

+0

Не будет работать, 'DATE_FORMAT' требует, чтобы дата ввода была в формате Y-m-d. Ваш запрос (если вы запустите его) вернет '2003-09-13', явно неверный – Lee

+0

Да, отмечено (после отправки, к сожалению) - обновлено. –

+0

Отменил мой голос на верх, только потому, что я не думал об этом. Не то, что я лично рекомендовал бы (так как я уверен, что вы тоже этого не сделали), но, учитывая его уникальные требования, кажется единственным способом сделать это. – Lee

1

Даты хранятся в формате. Вы можете использовать функцию date_format(), чтобы преобразовать ее в строку, используя различные форматы. Для твоего, в частности:

select date_format(`date`, '%Y-%m-%d') 
Смежные вопросы