powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Beetween...And...
10 сообщений из 35, страница 2 из 2
Beetween...And...
    #32263436
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все преобразования, если поле выборки индексированное, не есть хорошо: - время счета, скорей всего, вырастет на порядки (тем более если выборка стоит в WHERE , как рекомендуют умные люди, а не в HAVING) на большой таблице. Т.ч. используй че нить в виде {(t.fdate >= adate) AND (t.fdate <adate+1)}, Или {(t.fdate BETWEEN adate AND adate+1) AND (t.fdate <adate+1)}.

Кстати, интересно, а (t.fdate Like Int(adate) & "*") с индексированным не строковым полем работать будет также тормознуто, как с использованием ф-ий? (т.е. будет ли происходить неявное преобразование значения поля в сравнении? То что просто работает для даты - проверено в 97.)
...
Рейтинг: 0 / 0
Beetween...And...
    #32263437
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ответ Лох написал, я правильно понял?
На вопрос о том, как "откусить время". Тебе еще надо засунуть его в between
так
...CDate(Int([MyDateTime])) between FirstDate And LastDate...
если FirstDate и LastDate без времени.

В противном случае можно так:
...CDate(Int([MyDateTime])) between CDate(Int(FirstDate)) And CDate(Int(LastDate))...
или так
...([MyDateTime]>=CDate(Int(FirstDate)) And [MyDateTime]<CDate(Int(LastDate)))...
...
Рейтинг: 0 / 0
Beetween...And...
    #32263453
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну не нада там CDate, оно и так схавает (mdb/mde). И, подозреваю, шустрее отработает. Хотя все одно: - Int() к индексированному полю - это что серпом... мне кажется.
...
Рейтинг: 0 / 0
Beetween...And...
    #32263468
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Assa
Имхо, не стоит лишний раз доверять бейсиковому автоматическому приведению типов. Никогда заранее не скажу, к чему будет преобразована строка "1.1" при сравнении, скажем, с датами. То ли к "01-01-с.г." то-ли к (int)1.1, который затем превратиться в дату.
...
Рейтинг: 0 / 0
Beetween...And...
    #32263476
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. к (double)1.1
...
Рейтинг: 0 / 0
Beetween...And...
    #32263477
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. к (double)1.1
...
Рейтинг: 0 / 0
Beetween...And...
    #32263482
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ВСЕМ!

Все работает.
Окончательный запрос:
Код: plaintext
1.
2.
3.
SELECT count(счетчик.ip) AS [Количество посещений]
FROM [счетчик]
WHERE cdate(int(счетчик.whenlook)) between (cdate(([с какого]))) and (cdate(([по какое])));
...
Рейтинг: 0 / 0
Beetween...And...
    #32263484
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На лишние скобки просьба не обращать внимания :)
...
Рейтинг: 0 / 0
Beetween...And...
    #32263512
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2GEO

Просто извратный способ, придуман исключительно в попытке обойти "обработку" поля сравнения в инструкции WHERE - с тем, чтобы не терять преимущество индексного поиска. Но вот то-то и оно: когда с одной стороны стоит не строка, а "дата", а с другой - некая строковая величина (цифирь +*), казалось бы, Акс должен сравнивать "приведенное _к строке_ значение даты" с "цифирью & *" и не возвращать ничего (или того, что требуется), но он возвращает записи, как если бы он сравнивал "приведенное к строке значение ЧИСЛА, равного дате" с той-же "цифирью & *", что представляется забавным. Очень забавным.


При сравнении индексированных СТРОК оператор Like str & "*" работает значительно шустрее Like "*" & str (т.е. пользует индексы, а не тупой перебор). Вот и хочется поюзать то же преимущество, но в работе с цифирью. А вот тут масса вопросов. Особо, при использовании преобразования индексированных полей ф-ями. Ведь чтобы после этого пользоваться индексами, необходимо точно знать, что ф-ии монотонны. Скорей всего Акс этого "не знает" даже о своих библиотечных ф-ях (Int).

А по вопросу топика - (x>=n AND x<n+1 ) - оптимальное решение.
...
Рейтинг: 0 / 0
Beetween...And...
    #32263597
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы!
Если написать Like CDbl(adate) & "*", то не вернет ни хрена, и, даже, если CLng!!!

Ага, нарыл:
?Int(#12/02/2003#) & "*"
02.12.2003*
т.е Int(даты) _сам по себе_ возвращает значение типа "дата" :0). т.е.
вместо data>= #дата# AND data< #дата# +1 можно таки {Like Int(#дата#) & *} , (что не снимает вопроса о использовании индекса) а вот регион. настройки должны работать.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Beetween...And...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]