|
|
|
| Сложилась такая ситуация
В таблице есть поле date, где хранится дата. В данную таблицу импортировались данные из разных источников где каждом источнике формат даты разный.
Приведу пример из базы
09.03.1985
19280621
04.12.1950
19390520
20010316
12.11.1949
06.04.1956
Причем если в таком формате 06.04.1956, то поярдок такой ММ.ДД.ГГГГ
Меня интересует вопрос, возможно ли это сделать средствами MySQL?
С использованием php я придумал один вариант, но боюсь будут неточности приведения.
Если кто знает, посоветуйте как правильно это организовать | |
|
|
|
|
|
|
|
для: ols
(04.01.2009 в 18:26)
| | В таблице есть поле date, где хранится дата. В данную таблицу импортировались данные из разных источников где каждом источнике формат даты разный.
У поля date тип date?
И если поле типа date, это все записывалось? | |
|
|
|
|
|
|
|
для: AcidTrash
(05.01.2009 в 00:16)
| | К чему эти вопросы? Ясно же что нет! | |
|
|
|
|
|
|
|
для: AcidTrash
(05.01.2009 в 00:16)
| | >У поля date тип date?
>И если поле типа date, это все записывалось?
Нет, тип varchar.
Вообщем я пришел к такому выводу , написать функцию которая:
1) Ищет в подстроке точки, если находит значит тип ММ.ДД.ГГГГ переводим в ГГГГ -ММ-ДД
2) Если точек в подстроке нет, значит формат дата ГГГГММДД, переводим в ГГГГ-ММ-ДД
Соответсвенно при помощи цикла производить запрос на обновление подставляе в условие измененную дату.
Или можно что-то лучше придумать? | |
|
|
|
|
|
|
|
для: ols
(05.01.2009 в 13:11)
| | лучше сразу переводить в вид, соответствующий типу DATE или TIMESTAMP. легче будет потом всякие операции с датами проводить. | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2009 в 13:21)
| | Так я же и написал перевод в ГГГГ-ММ-ДД это и есть тип DATE() | |
|
|
|
|
|
|
|
для: ols
(05.01.2009 в 14:06)
| |
SELECT `date`, COALESCE(STR_TO_DATE(`date`, '%m.%d.%Y'),`date` + INTERVAL 0 DAY ) AS normdate FROM tbl
|
Если не жалко данных -
UPDATE tbl SET `date` = COALESCE(STR_TO_DATE(`date`, '%m.%d.%Y'),`date` + INTERVAL 0 DAY )
|
Только Вам это не поможет всё равно.
Откуда взялся такой формат ММ.ДД.ГГГГ ?
Так дату не записывают нигде. | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2009 в 15:36)
| | >Откуда взялся такой формат ММ.ДД.ГГГГ ?
>Так дату не записывают нигде.
Да, такого формата нет. Оказолось вот в чем дело. Все базы хранились первоначально в dbf формате, и при преоброзовании dbf - файла в csv-формат посредством MS Ofisse 2007 он почему-то формат даты преобразовывал из ДД.ММ.ГГГГ в ММ.ДД.ГГГГ тоесть просто менял значение местами. Выручил другой специализированный DBF-редактор умеющий выполнять операции импорта/экспорта в разные форматы.
Теперь в поле 2 формата данных
дд.мм.гггг и ггггммдд
Сейчас главно привести все это к типу date() - ГГГГ-ММ-ДД, так как требуется выполнять операции с датой. Trinon, помогите | |
|
|
|
|
|
|
|
для: ols
(05.01.2009 в 17:01)
| | Как дата вообще оказалась в текстовом поле?
>Сейчас главно привести все это к типу date() - ГГГГ-ММ-ДД, так как требуется выполнять операции с датой. Trinon, помогите
я же написал запрос, который эту процедуру проделает. | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2009 в 18:00)
| | Спасибо зазапрос.
А для чего тут Вы указали интервал тем более значение интервала 0?
>Как дата вообще оказалась в текстовом поле?
да в том то и дело что в единую базу нужно было выгрузить из нескоьких dbf -файлов причем в них дата была по-разному записана - в одном дд.мм.гггг а в другом ггггммдд | |
|
|
|
|
|
|
|
для: ols
(05.01.2009 в 18:23)
| | >А для чего тут Вы указали интервал тем более значение интервала 0?
просто чтобы привести поле к типу DATE
>так при выгрузке и нужно было приводить к дате. | |
|
|
|