Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Приведение даты в нормальный вид
 
 автор: ols   (04.01.2009 в 18:26)   письмо автору
 
 

Сложилась такая ситуация
В таблице есть поле date, где хранится дата. В данную таблицу импортировались данные из разных источников где каждом источнике формат даты разный.
Приведу пример из базы
09.03.1985
19280621
04.12.1950
19390520
20010316
12.11.1949
06.04.1956

Причем если в таком формате 06.04.1956, то поярдок такой ММ.ДД.ГГГГ

Меня интересует вопрос, возможно ли это сделать средствами MySQL?
С использованием php я придумал один вариант, но боюсь будут неточности приведения.
Если кто знает, посоветуйте как правильно это организовать

  Ответить  
 
 автор: AcidTrash   (05.01.2009 в 00:16)   письмо автору
 
   для: ols   (04.01.2009 в 18:26)
 

В таблице есть поле date, где хранится дата. В данную таблицу импортировались данные из разных источников где каждом источнике формат даты разный.
У поля date тип date?
И если поле типа date, это все записывалось?

  Ответить  
 
 автор: BinLaden   (05.01.2009 в 12:01)   письмо автору
 
   для: AcidTrash   (05.01.2009 в 00:16)
 

К чему эти вопросы? Ясно же что нет!

  Ответить  
 
 автор: ols   (05.01.2009 в 13:11)   письмо автору
 
   для: AcidTrash   (05.01.2009 в 00:16)
 

>У поля date тип date?
>И если поле типа date, это все записывалось?
Нет, тип varchar.

Вообщем я пришел к такому выводу , написать функцию которая:
1) Ищет в подстроке точки, если находит значит тип ММ.ДД.ГГГГ переводим в ГГГГ -ММ-ДД
2) Если точек в подстроке нет, значит формат дата ГГГГММДД, переводим в ГГГГ-ММ-ДД
Соответсвенно при помощи цикла производить запрос на обновление подставляе в условие измененную дату.
Или можно что-то лучше придумать?

  Ответить  
 
 автор: elenaki   (05.01.2009 в 13:21)   письмо автору
 
   для: ols   (05.01.2009 в 13:11)
 

лучше сразу переводить в вид, соответствующий типу DATE или TIMESTAMP. легче будет потом всякие операции с датами проводить.

  Ответить  
 
 автор: ols   (05.01.2009 в 14:06)   письмо автору
 
   для: elenaki   (05.01.2009 в 13:21)
 

Так я же и написал перевод в ГГГГ-ММ-ДД это и есть тип DATE()

  Ответить  
 
 автор: Trianon   (05.01.2009 в 15:36)   письмо автору
 
   для: 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 ) 



Только Вам это не поможет всё равно.

Откуда взялся такой формат ММ.ДД.ГГГГ ?
Так дату не записывают нигде.

  Ответить  
 
 автор: ols   (05.01.2009 в 17:01)   письмо автору
 
   для: Trianon   (05.01.2009 в 15:36)
 

>Откуда взялся такой формат ММ.ДД.ГГГГ ?
>Так дату не записывают нигде.
Да, такого формата нет. Оказолось вот в чем дело. Все базы хранились первоначально в dbf формате, и при преоброзовании dbf - файла в csv-формат посредством MS Ofisse 2007 он почему-то формат даты преобразовывал из ДД.ММ.ГГГГ в ММ.ДД.ГГГГ тоесть просто менял значение местами. Выручил другой специализированный DBF-редактор умеющий выполнять операции импорта/экспорта в разные форматы.
Теперь в поле 2 формата данных
дд.мм.гггг и ггггммдд

Сейчас главно привести все это к типу date() - ГГГГ-ММ-ДД, так как требуется выполнять операции с датой. Trinon, помогите

  Ответить  
 
 автор: Trianon   (05.01.2009 в 18:00)   письмо автору
 
   для: ols   (05.01.2009 в 17:01)
 

Как дата вообще оказалась в текстовом поле?

>Сейчас главно привести все это к типу date() - ГГГГ-ММ-ДД, так как требуется выполнять операции с датой. Trinon, помогите

я же написал запрос, который эту процедуру проделает.

  Ответить  
 
 автор: ols   (05.01.2009 в 18:23)   письмо автору
 
   для: Trianon   (05.01.2009 в 18:00)
 

Спасибо зазапрос.
А для чего тут Вы указали интервал тем более значение интервала 0?

>Как дата вообще оказалась в текстовом поле?

да в том то и дело что в единую базу нужно было выгрузить из нескоьких dbf -файлов причем в них дата была по-разному записана - в одном дд.мм.гггг а в другом ггггммдд

  Ответить  
 
 автор: Trianon   (06.01.2009 в 12:18)   письмо автору
 
   для: ols   (05.01.2009 в 18:23)
 

>А для чего тут Вы указали интервал тем более значение интервала 0?
просто чтобы привести поле к типу DATE

>так при выгрузке и нужно было приводить к дате.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования