powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск строки
10 сообщений из 35, страница 2 из 2
Поиск строки
    #32693366
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пол ляма записей
при отборе по строке + с использованием функции - ни какие индексы не помогут!!!

Меняй понятие - "долго выполняется"
И всех убеждай, что это им еще повезло!!!
...
Рейтинг: 0 / 0
Поиск строки
    #32693450
boban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при отборе по строке просто, проблемм нет, последняя запись за 1,5 секунда, а с функцией косяк
...
Рейтинг: 0 / 0
Поиск строки
    #32693540
быват
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще 2 решения:
если вероятных вхождений пробелов немного - динамически компоновать запрос с условием WHERE PTNRDRU = In('A 000 264 23 74', 'A 000 264 2374',....). Но если пробелы могут встречаться где угодно - получим (на N позициях) ~ 2**N вариантов - выйдем за допустимую длину SQL строки (~N*2**N > 32 768 символов - уже при ~28-29 позициях).

Если возможная строка длиннее 29 символов то:
вместо строки IN() можно использовать специально созданную таблицу с одним полем (индексированным). Накидывать туда до ~100000 записей не так уж долго. А выборку по INNER JOIN ON t1.[индексированное поле]=tmp.[индексированное поле] будет делать много быстрее, чем Replace () по 5*10**5 записей.


_______
Реализацию еще одной идеи я так и не придумал - надо вставить в Like 'xxxx' список [], включающий и пробел и пустую строку. Кажется это невозможно. Есть вариант идеи - провести первичный отбор, используя * между всеми значащими символами строки отбора (т.е. ~ LIKE 'A*0*0*0*2*6*4*2*3*7*4') (поскольку маска начинается не со *, то при этом индекс все-же будет использоваться), а уж на результат (выборку, которая заведомо будет много меньше всей таблицы) подействовать реплайсом.
...
Рейтинг: 0 / 0
Поиск строки
    #32693827
boban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом случае пишет ошибку синтаксиса, если я правильно понял, это должно было выглядеть так:
SELECT *
FROM PLDATA
WHERE PTNRDRU = In('A0002642374');
пишет : ошибка синтаксиса(пропушен оператор, указывает на In)
...
Рейтинг: 0 / 0
Поиск строки
    #32693956
быват
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторWHERE PTNRDRU = In('A0002642374');
тьфу, плиинннн.
оп-пиисаался
вот эт-тто "раавноо" таам лиишнее

а выглядеть должно так:
WHERE PTNRDRU IN(а тут перебор всех возможных случаев )
...
Рейтинг: 0 / 0
Поиск строки
    #32694023
boban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот вариант не пойдет, я не знаю изначально как будет у меня разбит номер, мне нужно ввести номер без пробелов а получить из таблицы с пробелами.
...
Рейтинг: 0 / 0
Поиск строки
    #32694132
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobanэтот вариант не пойдет, я не знаю изначально как будет у меня разбит номер, мне нужно ввести номер без пробелов а получить из таблицы с пробелами.
а какого хера ты мозги канифолишь?
тебе же написали
Код: plaintext
если вероятных вхождений пробелов немного
читать не умеешь?
или полагашь, что там от нехер делать буковки понатыканы, а за ними ни хера не стоит?
репу-то сморщь чутка.

Тебе же сказали, (етить тя через коромысло)
Код: plaintext
динамически компоновать запрос 
т.е. решить комбинаторную задачу со всеми перестановками. И в виду я имел, что "ты не знаешь". Задачка о составлении строки (переборе всех вариантов с аозможными вхождениями пробелов) при заданной длине поля решается. (Может тебе и алгоритм набрасать, ля?) Все упирается в длину результирующей строки IN(). Для разрешения ограничений предлагается срособ с сбрасыванием результатов перебора в вспомогательную таблицу.

А если деять ни хера не хошь/не мож - гуляйнах.
...
Рейтинг: 0 / 0
Поиск строки
    #32694165
boban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assa
Какой ты крутой пацан, только не хрена помоему не шаришь. Языком молоть любой может, а вот если бы ты конкретней говорил, людям бы жить легче было. Деятель, зато слово нах знает. ХА ХА.Понты кинуть любой может, только ничего из твоих слов не видно.
...
Рейтинг: 0 / 0
Поиск строки
    #32694247
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторлюдям бы жить легче было

а вот с этим как раз и не сюда. С этим как раз - нах. С такими запросами - груши околачивать, а не SQL выражовывания писать. вумник, ля.
...
Рейтинг: 0 / 0
Поиск строки
    #32698235
быват
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
походя всплыло "чисто" SQL-ное решение комбинаторной задачи
1. Вспомогательная таблица l, пустая. 1 поле t - текст, 1 символ.
2. вводишь 2 строки:
INSERT INTO list ( t ) VALUES(' ');
INSERT INTO list ( t ) VALUES('');

для строки 'A0002642374' составляешь запрос вида:

Код: plaintext
1.
2.
3.
4.
5.
SELECT 'A' & [l].[t] & '0' & [l_1].[t] & '0' & [l_2].[t] & '0' & [l_3].[t]
 & '2' & [l_4].[t] & [l_5].[t] & '6' & [l_6].[t] & '4' & [l_7].[t] & '2'
 & [l_8].[t] & '3' & [l_9].[t] & '7' & [l_10].[t] & '4' AS s

FROM l, l AS l_1, l AS l_2, l AS l_3, l AS l_4, l AS l_5,
 l AS l_6, l AS l_7, l AS l_8, l AS l_9, l AS l_10;
(2048 вариантов для 11 позиций), обзови его q
а с ним сделай:
Код: plaintext
1.
2.
SELECT test.*
FROM test INNER JOIN q ON test.t = q.s;
где test.t - это поля поиска твоих кодов. (хотя лучше сбросить результат q в индексированную вспомогательную табличку).
(в общем виде - замени q на параметрический (используя mid([параметр], позиция,1) вместо буковок)
Но, думается, решение скорее факультативное, чем имеющее прикладное значение.



ЗЫ что-й то я надысь на редкость наврал по количеству позиций. 20 позиций дают уже более лимона вариантов. а 32к вариантов ~ всего-то 10+5 позиций.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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