MySQL — конвертирование varchar в date — тип данных
Сегодня понадобилось перевести таблицы из базы данных .dbf в таблицы БД MySQL 5. Нашел несколько программ в интернете для экспорта данных и экспортировал их в формат CVS.
Все было бы хорошо, если бы экспортируемая в строковой тип дата автоматически преобразовывалась в MySQL — date.
У меня появилась задача, преобразовать тип varchar ‘25.04.2007‘ в формат date ‘2007-04-25‘. Для этого я создал дополнительное поле с типом данных DATE.
Привожу ниже MySQL скрипт:
UPDATE `table1`
SET `new_date` = CONCAT(
SUBSTRING_INDEX( `date_str` , '.', -1 ) , '-',
SUBSTRING_INDEX( SUBSTRING_INDEX( `date_str` , '.', 2 ) , '.' , -1 ) , '-',
SUBSTRING_INDEX( `date_str` , '.', 1 ) ) ;
date_str — это поле varchar c датой в формате ‘25.04.2007‘
new_date — это поле date c датой в формате ‘2007-04-25‘
Кому любопытно, можете посмотреть, что делают такие функции как CONCAT, SUBSTRING_INDEX:
SELECT `date_str` ,
CONCAT(SUBSTRING_INDEX(`date_str` , '.', -1 ), '-',
SUBSTRING_INDEX(SUBSTRING_INDEX( `date_str` , '.', 2 ),'.',-1), '-',
SUBSTRING_INDEX( `date_str` , '.', 1 )) AS newdate
FROM `table1`
Вот так я решил эту задачку без использования PHP. Надеюсь, кому-то это понадобится.
Читайте ещё похожие статьи на этом сайте:
- MySql удаленное подключение, доступ по сети
- Задача по MySQL, работа с датой и интервалом
- Timestamp 1234567890 секунд
Если Вам понравилась эта статья, пожалуйста оставьте свой комментарий или подпишитесь на RSS-канал и получайте в будущем статьи на RSS Reader.

Я приношу свою благодарность автору статьи, твой запрос по истине гениален, я обязательно возьму на заметку алгоритм конвертирования, благодаря таким работоспособным кодам этот мир держится на плаву:))! Спасибо
Спасибо, за благодарность! Поэтому я и завел свой небольшой блог, чтобы делиться накопленной информацией. Может кому-то и пригодится!
Подскажите как преобразовать такой тип varchar 2/23/2008 в формат date ‘2008-2-23‘
Dmi, по такому же принципу, примерно так :
SELECT '2/23/2008',CONCAT(
SUBSTRING_INDEX('2/23/2008' , '/', -1 ), '-',
SUBSTRING_INDEX( '2/23/2008' , '/', 1 ), '-',
SUBSTRING_INDEX(SUBSTRING_INDEX( '2/23/2008' , '/', 2 ),'/',-1)
) AS newdate
вместо ‘.’ Вам нужно указать ‘/’ и правильно расположить индексные номера.
Здравствуйте!
У меня следующий вопрос. Пользователь вводит на форме дату в формате DD.MM.YYYY. В базу данных мне нужно занести в формате YYYY-MM-DD. Как это сделать Вашим способом?
Выдает ошибку Invalid query: Unknown column ‘‘.’’ in ‘field list’. В чем проблема?
Всё починила
Надо было кавычки ставить не так ‘.’, а вот так ‘.’
А скрипт реально крут. Целый день возилась, как дату в другой формат перевести. Спасибо огромнейшее!
Светлана, рад, что скрипт пригодился не только мне. Приятно, когда труд не уходит напрасно.
Труд — он всегда не напрасен
Спасибо большое. Как раз решаю такую же задачу и наткнулся на скрипт, буду пробовать. СПАСИБО.
DATE_FORMAT(date, format)
date=имя переменной
format = ‘%d.%m.%Y’
Так покороче будет:
UPDATE table1
SET new_date = STR_TO_DATE(date_str, ‘%e.%c.%Y’)
Огромное спасибо автору! Убил полдня над этой задачей в пхпмайадмин. Жаль что в гугле данный пример не на первой странице. Автору Респект!