|
|
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Все преобразования, если поле выборки индексированное, не есть хорошо: - время счета, скорей всего, вырастет на порядки (тем более если выборка стоит в 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.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 11:51 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Правильный ответ Лох написал, я правильно понял? На вопрос о том, как "откусить время". Тебе еще надо засунуть его в 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)))... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 11:51 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Да ну не нада там CDate, оно и так схавает (mdb/mde). И, подозреваю, шустрее отработает. Хотя все одно: - Int() к индексированному полю - это что серпом... мне кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:00 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
2Assa Имхо, не стоит лишний раз доверять бейсиковому автоматическому приведению типов. Никогда заранее не скажу, к чему будет преобразована строка "1.1" при сравнении, скажем, с датами. То ли к "01-01-с.г." то-ли к (int)1.1, который затем превратиться в дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:08 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Т.е. к (double)1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:10 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Т.е. к (double)1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:10 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Спасибо ВСЕМ! Все работает. Окончательный запрос: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:13 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
На лишние скобки просьба не обращать внимания :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:14 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
2GEO Просто извратный способ, придуман исключительно в попытке обойти "обработку" поля сравнения в инструкции WHERE - с тем, чтобы не терять преимущество индексного поиска. Но вот то-то и оно: когда с одной стороны стоит не строка, а "дата", а с другой - некая строковая величина (цифирь +*), казалось бы, Акс должен сравнивать "приведенное _к строке_ значение даты" с "цифирью & *" и не возвращать ничего (или того, что требуется), но он возвращает записи, как если бы он сравнивал "приведенное к строке значение ЧИСЛА, равного дате" с той-же "цифирью & *", что представляется забавным. Очень забавным. При сравнении индексированных СТРОК оператор Like str & "*" работает значительно шустрее Like "*" & str (т.е. пользует индексы, а не тупой перебор). Вот и хочется поюзать то же преимущество, но в работе с цифирью. А вот тут масса вопросов. Особо, при использовании преобразования индексированных полей ф-ями. Ведь чтобы после этого пользоваться индексами, необходимо точно знать, что ф-ии монотонны. Скорей всего Акс этого "не знает" даже о своих библиотечных ф-ях (Int). А по вопросу топика - (x>=n AND x<n+1 ) - оптимальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 12:26 |
|
||
|
Beetween...And...
|
|||
|---|---|---|---|
|
#18+
Гы! Если написать Like CDbl(adate) & "*", то не вернет ни хрена, и, даже, если CLng!!! Ага, нарыл: ?Int(#12/02/2003#) & "*" 02.12.2003* т.е Int(даты) _сам по себе_ возвращает значение типа "дата" :0). т.е. вместо data>= #дата# AND data< #дата# +1 можно таки {Like Int(#дата#) & *} , (что не снимает вопроса о использовании индекса) а вот регион. настройки должны работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2003, 13:03 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32263597&tid=1679473]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 310ms |

| 0 / 0 |
