|
|
|
Индексация по полю DATETIME
|
|||
|---|---|---|---|
|
#18+
Как проиндексировать записи по комплексу двух полей: первое (INTEGER, по возрастанию) + второе (DATETIME, по убыванию) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 22:51:42 |
|
||
|
Индексация по полю DATETIME
|
|||
|---|---|---|---|
|
#18+
Если из одного значения DateTime вычесть другое значение DateTime, то получим их разность в миллисекундах. Если делать вычитание из фиксированного значения DateTime (не важно какого), то чем больше вычитаемое, тем меньше результат. Т.е. упорядочивание по убыванию. Если intField - это поле типа Integer, а dtField - это поле типа DateTime, то можно примерно так: Код: plaintext Такой способ задания контстанты типа DateTime появился только в VFP6. Для ранних версий надо писать константу другим способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 23:59:16 |
|
||
|
Индексация по полю DATETIME
|
|||
|---|---|---|---|
|
#18+
Hi men dea! Нечто типа. BINTOC(nIntegerField, 4) + STR(DATETIME(9999,12,31,0,0,0) - tDateTimeField, 12, 0) Если могут быть пустые даты - то избавься от них (IIF в старых версиях фокса, EVL () в 9-ке - заменяй по смыслу - на DATETIME(1601,1,1) или на 9999 год...) если в поле с целым числом могут быть символы переполнения (по простому говоря "звёздочки") - то вместо компактного BINTOC() придётся пользовать раздутый STR(nIntegerField, 10)... Можно в принципе и второе число попытаться завернуть в BINTOC() - но для этого придётся взять за базу не 9999 год, а что-то гораздо более близкое -чтоб по размерности разности (она кстати в секундах) не выходить за пределы целого числа... Ессно что BINTOC() диктует использование COLLATE=MACHINE Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 02:28:42 |
|
||
|
Индексация по полю DATETIME
|
|||
|---|---|---|---|
|
#18+
Вобще говоря, построение композитного индекса с убыванием и возростанием по разным полям одновременно, это не тривиальная задача. Я для построения композитных индексов по возрастанию и по убыванию использую две функции (используется в моем классе SMART_GRID): NumToStr и Revers, через которые "пропускаю" поля любого типа, когда требуется строить композитный индекс. Все приводится к символьному типу: Перевод числа в символ: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Тогда для твоего примера индексное выражение будет выглядить так: Код: plaintext С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 08:56:37 |
|
||
|
Индексация по полю DATETIME
|
|||
|---|---|---|---|
|
#18+
проблемы ? что ли index on str(f_int,n,m)+str(40000000-val(dos(f_date)),8) to ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 10:49:40 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=293&tid=1593104]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 336ms |

| 0 / 0 |
