Работа с "кривыми датами"

botan

Новичок
Работа с "кривыми датами"

Есть скрипт написаный не мной.
В нем в таблицу в частности падает дата в формате varchar(25). Самый ужас - что дата храниться в виде "yyyy:mm:dd", т.е. разделена не "-" а ":".
date_add к такому виду применим - а вот сравнить уже не получается
Меня попросили "дописать" это дело, и в частности сделать по этой таблице выборку по дате.

Вопроса 2:
1. Можно ли средствами MySQL заменить в поле один символ на другой.
2. Можно сравнивать даты разных форматов, как нибудь более "прямо" нежели через month() day()...

Ну и просто вопрос, в MySQL можно писать свои функции ?
если да то как, может ссылочку кто подкинет ?
 

Апельсин

Оранжевое создание
> В нем в таблицу в частности падает дата в формате varchar(25).

кто мешает хранить в поле типа DATE?

> Можно ли средствами MySQL заменить в поле один символ на другой.

ну если ты хранишь как строку, то строковая функция REPLACE():
http://www.mysql.com/doc/en/String_functions.html

> Можно сравнивать даты разных форматов, как нибудь более "прямо" нежели через month() day()

что понимается под разными форматами? это могут сравниваться данные типа DATE и DATETIME, а могут две строки, каждая из которых имеет свой формат.

> Ну и просто вопрос, в MySQL можно писать свои функции ?

да.
http://www.mysql.com/doc/en/Adding_functions.html
 

botan

Новичок
кто мешает хранить в поле типа DATE?

автор предыдущего скрипта. он работает и его нельзя трогать.

мне уже в другом месте подсказали юзать

to_days

собственно решение проблемы

а сравнивать даты - именно разных форматов.
один из них варчар - другой - date и datetime

за функции пасиба - не догадался глянуть...
 

Кром

Новичок
botan', ты не понял. Тебе нужно поменять структуру таблицы и твои даты преобразятся самым чудесным образом, без всякой потери.
Затем идешь сюда:
http://www.mysql.com/doc/ru/DATETIME.html
Смотришь на многообразие функций, бурно радуешся и поешь в голос.
 

botan

Новичок
уже.
и там нашел этот самый

mysql> SELECT TO_DAYS('1997-10-07');
-> 729669

а елси дату и время из варчара поместить в поле datetime, то такая лабуда получается... пробовал.
 

botan

Новичок
timesnap :)
поставил вместо варчара.
и оставил скрипт без изменений.
и все то что надо.
когда до этого пытался менять тип на "дату-время"
такие сумашедшие цифры получал...
 

Кром

Новичок
>timesnap

TIMESTAMP, прошу заметить.

>когда до этого пытался менять тип на "дату-время"
такие сумашедшие цифры получал...

Так все таки, пример увидеть можно?
 

botan

Новичок
а пример чего именно ?

я не трогал исходного скрипта, поменял в исходной таблице поле с varchar на timesnap
теперь могу делать по нему выборку.

А раньше думал что меньше чем 5-ти строчечным запросом не разбирусь...
 

Фанат

oncle terrible
Команда форума
такие сумашедшие цифры получал...
с умом надо делать.
тогда и цифры не будут с ума сходить.
СНАЧАЛА
РУКАМИ
изменить формат
чтобы в поле типа варчар лежала дата в правильном формате.
update table set date=replace(bla,bla)
И после этого, если изменить тип поля, то все получится тип-топ

правда, если скрипт рассчитан на формат гггг:мм:дд, то я не уверен, что он будет работать с правильным форматом
 

Кром

Новичок
Фанат, при формате гггг:мм:дд достаточно поменять тип поля на date, timestamp или datetime.
Цифры с ума сходить не должны :)
 

botan

Новичок
попробуйте
если данные храняться в формате почти как now() но разделенные ":" и изменить тип поля на date time цифры и впрямь будут веселые.
 

Апельсин

Оранжевое создание
У меня все преобразуется замечательно:

mysql> select * from t1;
+---------------------+
| mydate |
+---------------------+
| 2003:01:01 11:11:11 |
| 2003:02:02 11:11:11 |
+---------------------+
2 rows in set (0.00 sec)

mysql> alter table t1 change mydate mydate datetime;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from t1;
+---------------------+
| mydate |
+---------------------+
| 2003-01-01 11:11:11 |
| 2003-02-02 11:11:11 |
+---------------------+
2 rows in set (0.00 sec)

как видишь с данными все остается в порядке.
 

Кром

Новичок
Апельсин, это бесполезно :)
Я уже со вчерашнего дня упрашиваю его показать общественности тот формат, который у него не конвертируется. Пока ничего внятного не услышал.
 

botan

Новичок
Как с утра пришел - еще не отошел:

оказывается это чудо следующего вида:

23.09.2003.16:07:24

идеи ?
 

Кром

Новичок
>23.09.2003.16:07:24

botan', а эту строку ты где взял, я что-то не совсем понимаю. Это еще один скрипт "написаный не мной"?
Или это все тот-же?
В таком случае, у нас есть уже два вида записи:
1. "yyyy:mm:dd"
2. 23.09.2003.16:07:24
Есть ли еще какие-либо формы записи даты, в этом чудо-скрипте, о которых мы еще не знаем?
 

botan

Новичок
не меня это утомило - пошел переделывать исходный скрипт.
это не должно быть так криво.
 
Сверху