URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6235
[ Назад ]

Исходное сообщение
"mysql: ... where datetime between time1 and time2 ..."

Отправлено rmf , 06-Мрт-07 17:29 
можно ли и как сделать подобный по смыслу запрос

select * from table
where DATETIME_FIELD between '10:00:00' and '10:59:59'

то есть есть поле типа DATETIME (дата и время)
нужна выборка всех значений в интервале времени (пофиг на дату)

без разбиения поле DATETIME на 2 поля DATE и TIME


Содержание

Сообщения в этом обсуждении
"mysql: ... where datetime between time1 and time2 ..."
Отправлено rmf , 06-Мрт-07 17:42 
Забыл добавить - версия MySQL 4.0.20

`TIME()' is available as of MySQL 4.1.1.


"mysql: ... where datetime between time1 and time2 ..."
Отправлено elvenic , 06-Мрт-07 18:16 
>можно ли и как сделать подобный по смыслу запрос
>
>select * from table
>where DATETIME_FIELD between '10:00:00' and '10:59:59'
>
>то есть есть поле типа DATETIME (дата и время)
>нужна выборка всех значений в интервале времени (пофиг на дату)
>
>без разбиения поле DATETIME на 2 поля DATE и TIME

<...>
where
    hour(DATETIME_FIELD) * 3600 + minute(DATETIME_FIELD) * 60 + second(DATETIME_FIELD) <
    10 * 3600 + 00 * 60 + 00
and
    hour(DATETIME_FIELD) * 3600 + minute(DATETIME_FIELD) * 60 + second(DATETIME_FIELD) >
    10 * 3600 + 59 * 60 + 59

or something like this ;)


"mysql: ... where datetime between time1 and time2 ..."
Отправлено rmf , 07-Мрт-07 09:53 
>or something like this ;)

очень похоже.

однако теперь встал другой вопрос:
будет ли использован индекс поля DATETIME_FIELD ?

а) при таком запросе
б) при запросе TIME(DATETIME_FIELD) between TIME1 and TIME2 в mysqld > 4.1.11

предполагаю, что индекс НЕ БУДЕТ использован в обоих случаях

буду проверять


"mysql: ... where datetime between time1 and time2 ..."
Отправлено elvenic , 07-Мрт-07 18:20 
>будет ли использован индекс поля DATETIME_FIELD ?
>
>а) при таком запросе
>б) при запросе TIME(DATETIME_FIELD) between TIME1 and TIME2 в mysqld > 4.1.11
>

Можно попробовать сказать explain <sql text> - очень часто это открывает глаза на многое ;)


"mysql: ... where datetime between time1 and time2 ..."
Отправлено Savva , 07-Мрт-07 17:42 
>можно ли и как сделать подобный по смыслу запрос
>
>select * from table
>where DATETIME_FIELD between '10:00:00' and '10:59:59'
>
>то есть есть поле типа DATETIME (дата и время)
>нужна выборка всех значений в интервале времени (пофиг на дату)
>
>без разбиения поле DATETIME на 2 поля DATE и TIME


Может я чего то не понял ...
Но разве так нельзя ? :
select * from table where HOUR(DATETIME_FIELD)=10

и еще: скорей всего в 4-м мускуле нет, но может появилось в пятом - построение мндекса с указанием функции (в данном случае 'HOUR(DATETIME_FIELD)')... ну как то так в постгресе имеется


"mysql: ... where datetime between time1 and time2 ..."
Отправлено rmf , 07-Мрт-07 17:47 
>Может я чего то не понял ...
>Но разве так нельзя ? :
>select * from table where HOUR(DATETIME_FIELD)=10

Это я не точно определил задачу.
Диапазон время произвольный, например: 10:15:00  - 17:39:52

>и еще: скорей всего в 4-м мускуле нет, но может появилось в
>пятом - построение мндекса с указанием функции (в данном случае 'HOUR(DATETIME_FIELD)')...
>ну как то так в постгресе имеется

Интересная информация, спасибо.