запрос [sql] ...та-та-та... WHERE date BETWEEN '19.03.08' AND '19.06.08'[/sql] выводит в итоге 0, хотя в таблице есть следующие например данные: 02.05.08, 04.05.08. Вопрос, почему? подскажите что делаю не так. Спасибо! ps У поля date аттрибут text
можно на лету конвертить ... но глупое решение .. даты надо хранить как даты .. ну или как даташтампы в интеджер ... а при конвертации слишком большие нагрузки могут возникнуть
налету - можно. но только как в таком случае быть с требуемой операцией between - так задачка не решиться. да неважно мне в каком формате дата хранится. between должен работать не только с датами - но и данными. представим что это простые текстовые данные, которые нужно реализовать с... и по... только вот почему непонятно он не выдаёт - видимо ориентируется только по первому числу, а другие - игнорирует. что, реально больше ничего сделать нельзя?
а если дату сохранить в mysql как дату, что, тогда в разных скриптах появиться возможность конвертировать по разному? Можно значит в одном скрипте извлеч в DD.MM.YY., а в другом скрипте - DD-MM-YYYY так? Если да, то 1. какой аттрибут нужно поставить в поле date? , 2. какими командами можно будет конвертировать строки для выдачи в php? и 3. в каком формате нужно будет "загонять" дату в это поле? Огромное спасибо за ответы!
А системе важно. Вы программированием занимаетесь, а не копанием в песочнице. http://www.mysql.ru/docs/man/Date_and_t ... tions.html http://www.mysql.ru/docs/man/Date_and_time_types.html
в mysql есть внутренняя функция DATE_FORMAT, она тебе вернет дату в том формате, в котором ты попросишь. и ты можешь даже не знать, как оно хранится на самом деле.
премудрость блин. вот в oracle было бы всё проще... [sql]WHERE ORDER_DATE BETWEEN TO_DATE('01.11.1989','DD/MM/YYYY') AND TO_DATE('31.12.1989','DD/MM/YYYY') [/sql]
господа, не могу сам разобраться в этой теме! Читал доки, ну нет в mysql команды between + дата как мне показалось. В доках рассказано как можно крутить датами - и так и сяк, а вот как извлеч тупо "с" и "по" не описано! То что between чувствителен к первой цифре/букве это ясно, но вот ума не приложу почему в mysql нет функции вывода данных "с" и "по" циклом и не по первой букве! Ведь у нас же в таблице есть данные, которые прикручены к своим id, и вот таким образом можно было бы извлечь все строки начинающиеся с например 01.01.08 до 01.006.08. Не понимаю почему такой функции нет. Да и философствовать на эту тему бесмыссленно - нет значит посчитали не включать по своим соображениям. объясните кому не сложно всё по конкретнее на те вопросы, чтобы наконец-то можно было мне сделать задуманное. Ну очень благодарен!
с функциями мараться не хочеться - это одно что налету формировать данные. Лучше бы понять как формат даты переделать чтобы была возможность её свободной конвертации и самое главное извлечение "с" и "по"
на тему BETWEEN и дат, необходимо передавать дату в том же формате, в котором она хранится в БД (м.б. в mysql5 этого и не требуется, тестировалось на 4.1.16). м.б. можно предварительно приводить дату к передаваемому формату и в нем сравнивать, пробуйте [sql] -- ---------------------------- -- Table structure for dates -- ---------------------------- CREATE TABLE `dates` ( `id` int(11) NOT NULL auto_increment, `date` date default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `dates` VALUES ('1', '2001-01-01'); INSERT INTO `dates` VALUES ('2', '2001-01-02'); INSERT INTO `dates` VALUES ('3', '2001-01-03'); INSERT INTO `dates` VALUES ('4', '2001-01-04'); INSERT INTO `dates` VALUES ('5', '2001-01-05'); INSERT INTO `dates` VALUES ('6', '2001-01-06'); INSERT INTO `dates` VALUES ('7', '2001-01-07'); INSERT INTO `dates` VALUES ('8', '2001-01-08'); INSERT INTO `dates` VALUES ('9', '2001-01-09'); [/sql] Код (Text): mysql> select `id` FROM dates WHERE date BETWEEN '01.01.2001' AND '05.01.2001'; Empty set mysql> select `id` FROM dates WHERE date BETWEEN '2001-01-01' AND '2001-01-05'; +--+ | id | +--+ | 1 | | 2 | | 3 | | 4 | | 5 | +--+ 5 rows in set mysql> P.S. копируя запрос, помните, что тест проводился в консоли mysql, не забудьте удалить ";" в конце запроса
DarkElf, благодарю за детальную инструкцию. Всё похоже получилось. Вопрос такой. некоторые данные в таблицах если в phpmyadmin просматривать выглядят как Код (Text): & # 1089 ; & # 1086 ; - наделал пробелов, тк. если этого не сделать даже на форуме выдаст буквы "со" при этом всё нормально извлекается - никаких крякозябров нет. Это нормально? (всмысле то что некоторые данные приобретают такой вид?)
видимо, latin1, вроде как она идет кодировкой по-умолчанию. если данных немного, имхо, пересоздай базу данных