|
В запросе обрабатывать содержимое поля (убрать спецсимволы)и сравнивать с искомым | ☑ | ||
---|---|---|---|---|
0
alexeyomg
21.09.15
✎
22:32
|
Нужно найти телефон в регистре сведений очень быстро. Но телефоны хранятся с плюсиками, пробелами и тире.
Нужно произвести поиск искомого телефона очень быстро (рассчитывается на большую базу). Поэтому хочу узнать, как можно в запросе сравнивать поле с номером телефона (не очищенный, т.е. с плюсиками и т.д.) из базы с искомым номером на уровне запроса, а не с помощью перебора после выгрузки. Если это возможно, то это быстрее будет работать, так как 99% времени занимает выгрузка таблицы по запросу. Я нашёл только тему с ПОДОБНО, если можно сравнить с шаблоном. Да я могу понять с его помощью, содержит ли поле спецсимвол, но мне нужно сразу в запросе сравнить поле БЕЗ спецсимволов, но как это сделать? На уровне запроса очень мало операций можно выполнять же. Можно это реализовать или каким-то образом сократить ? |
|||
1
FIXXXL
21.09.15
✎
22:40
|
Модернизируй запись и один раз перезаполни РС по шаблону.
|
|||
2
Толич
21.09.15
✎
23:01
|
Сделайте новый текстовый ресурс в том же регистре сведений с телефонами "НомерЦифрами" и найдите все цифры в телефоне и заполните этот ресурс.
Затем через "подобно" ищите в запросе. |
|||
3
DiMel_77
22.09.15
✎
07:50
|
Задача простая, тебе надо в запросе выразить текст как целое число. Есть хорошая статья на эту тему: http://catalog.mista.ru/public/170336/ написано уважаемым ildarovich (он есть на этом форуме).
|
|||
4
DiMel_77
22.09.15
✎
08:10
|
+(3) Запрос будет иметь примерно такой вид:
ВЫБРАТЬ ТвойРегистр.Телефон КАК Телефон, ТвойРегистр.Контрагент КАК Контрагент ПОМЕСТИТЬ ВТ_Телефоны ИЗ РегистрСведений.ТвойРегистр КАК ТвойРегистр ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ 0 КАК С, 1 КАК П ПОМЕСТИТЬ Р16 ОБЪЕДИНИТЬ ВЫБРАТЬ 1, 10 ОБЪЕДИНИТЬ ВЫБРАТЬ 2, 100 ОБЪЕДИНИТЬ ВЫБРАТЬ 3, 1000 ОБЪЕДИНИТЬ ВЫБРАТЬ 4, 10000 ОБЪЕДИНИТЬ ВЫБРАТЬ 5, 100000 ОБЪЕДИНИТЬ ВЫБРАТЬ 6, 1000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 7, 10000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 8, 100000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 9, 1000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 10, 10000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 11, 100000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 12, 1000000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 13, 10000000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 14, 100000000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 15, 1000000000000000 ОБЪЕДИНИТЬ ВЫБРАТЬ 16, 10000000000000000 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Телефоны.Контрагент, ВТ_Телефоны.Телефон, СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК ТелефонЧисло ИЗ ВТ_Телефоны КАК ВТ_Телефоны, Р16 КАК А, Р16 КАК Б ГДЕ Б.С < 10 И ПОДСТРОКА(ВТ_Телефоны.Телефон, 17 - А.С, 1) = ПОДСТРОКА("0123456789", Б.С + 1, 1) СГРУППИРОВАТЬ ПО ВТ_Телефоны.Контрагент, ВТ_Телефоны.Телефон У меня другая была задача, но похожая 27 тыс. элементов преобразовывались за ~3 сек. |
|||
5
ЧеловекДуши
22.09.15
✎
08:18
|
(0) Чо бы нормально искать, нужно нормально хранить :)
Наприги, мозх, и осиль Подобно... там все просто :) |
|||
6
ЧеловекДуши
22.09.15
✎
08:20
|
+(0) Быстрее будет работать, если вы добавите индекс. и разделите телефонный номер на составляющие, который будут соответствовать искомому шаблону.
Исключите Подобно, т.к. оно все же ищет медленней, чем просто равенство "=" :) |
|||
7
alexeyomg
22.09.15
✎
08:49
|
ПОДОБНО не даёт прирост в скорости работы почти.
Я бы хранил телефон нормально, чтобы искать нормально, но нельзя вносить изменения в конфу. Обработка универсальной должна быть, менять может только запрос. Поэтому я ищу вариант, чтобы искать по базе телефон быстро. Сейчас попробую тему с преобразованием строки в число. Фишка в том, что на моём компе поиск телефона по базе с 100 000 телефонами в РС происходит за секунду. А на слабеньком компе минуту целую. Вот и я хочу найти способ ускорить это. Но мне нужно, чтобы и на слабом компе не лагало. В том числе в случае, когда база файловая на шаре лежит гденть у клиентов. |
|||
8
alexeyomg
22.09.15
✎
08:49
|
(6) (2) (1) (4)
|
|||
9
dk
22.09.15
✎
08:57
|
грузи все в ТЗ добавляй индекс и и ищи по ней
либо во временной таблице с индексами храни вопрос только с обновлением информации - как часто инфа меняется? |
|||
10
alexeyomg
22.09.15
✎
09:08
|
да как раз фишка в том, что нужно искать прям в актуальной базе. Поиск этот может проводиться в следующую секунду после добавления нового документа, а значит и новой записи в РС (либо изменение).
Поэтому у меня нет ресурсов, чтобы преобразовывать каждый раз все записи из регистре. Вот такие дела. Да по сути так неправильно. И надо хранить данные в норм формате и так искать по формализированному полю. Но обработка универсальная. И если даже один раз сделать преобразование, добавив телефон норм формата в какое-нибудь поле, то при следующем добавлении телефона в этот регистр, мы не будем иметь телефон "очищенный" и снова надо будет обрабатывать и писать телефон в другое поле, что мы не можем себе позволить (9) |
|||
11
dk
22.09.15
✎
09:11
|
тут либо данные в удобном виде для поиска, либо полный перебор
|
|||
12
alexeyomg
22.09.15
✎
09:56
|
Ну я как бы догадывался,но на всякий случай спросил. Ну ладно, спасибо
|
|||
13
dk
22.09.15
✎
10:03
|
есть еще 1 вариант - железо ускорять
терминал / скуль + куча оперативки |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |