Преобразование типов..... Глюк

Diogen

Новичок
Преобразование типов..... Глюк

Версия сервер MySQL 4.1

запрос

SELECT * FROM `table1` o
INNER JOIN `table2` e ON (e.`num` = o.`endtask`)
WHERE (((CAST(o.`completetime` AS DATE) BETWEEN "2009-05-01" AND "2009-05-06" AND
CAST(o.`completetime` AS TIME) BETWEEN "0:00:00" AND "13:00:00" )))
AND o.`feildinteger` = 302 AND (e.`groupid` = "0")

Если так задать - ничего не возвращает
Но записи попадающие в этот интервал есть.

Если указать время начиная с 22:00:00 любое до 23:59:59

Например

SELECT * FROM `table1` o
INNER JOIN `table2` e ON (e.`num` = o.`endtask`)
WHERE (((CAST(o.`completetime` AS DATE) BETWEEN "2009-05-01" AND "2009-05-06" AND
CAST(o.`completetime` AS TIME) BETWEEN "0:00:00" AND "22:00:00" )))
AND o.`feildinteger` = 302 AND (e.`groupid` = "0")

Выдает все записи даже те что имеют значение "2009-05-01 23:14:45"

Полный бред.


Что не так с запросом.
 

Фанат

oncle terrible
Команда форума
а попроще нельзя было запрос написать?
безо всяких feildinteger, джойнов и прочего?
И зачем там каст?
 

Diogen

Новичок
ПРОЩЕ?

задача:
Подсчитайте количество заказаов с 6:00 до 10:00
за интервал времени с 1.05.2009 по 6.05.2009

Куда проще при условии что completetimу- поле Datetime


ваше решение КОЛЛЕГА! Готов его обсудить!!!

-~{}~ 08.08.09 00:09:

Огараничения на выборку - я опущю

AND o.`feildinteger` = 302 AND (e.`groupid` = "0") без этой строчки
Ваше решение жду.....
 

Фанат

oncle terrible
Команда форума
Мое решение будет такое.
Если есть проблема с приведением типов, то в запросе должно быть только приведение типов. А не еще 110 условий, каждое из которых может повлиять на результат.
Это не очевидно?
 

Diogen

Новичок
Это ответ из серии " я думаю, что вы неправильно думаете"
И позицианирю этот ответ как простой автоматически сгенерированый постер.
 

zerkms

TDD infected
Команда форума
Diogen
с чего ты решил, что проблема именно в приведении типов?
 

Diogen

Новичок
если не верите попробуйте сами создать
В таблице : поле датавремя внесите туда даные д

А потом выберите для каждого дня интервал по времени - и удивитесь от точности результата.
Удивитесь на столько - что задумаетесь а правильно ли вы поступали последние 15 лет используя это В других приложениях.
 

svetasmirnova

маленький монстрик
Diogen
Complete test case приведи с SHOW CREATE TABLE обоих таблиц и желательно с данными. Также укажи точную версию MySQL
 
Сверху