![]() |
![]() |
|
v7: Прямой запрос: получить оставшиеся цифры... | ☑ | ||
---|---|---|---|---|
0
Злопчинский
20.10.12
✎
06:38
|
Вот кропаю.. прямой запрос.. как умею...
. Справочник.Номенклатура Вводим с клавы цифры - это НАЧАЛЬНЫЕ ЦИФРЫ артикула. . Хочу получить ПЕРЕЧЕНЬ ЦИФР, которые есть в хвостах артикулов, начинающихся с введенных цифр. . т.е. есть например у меня артикулы в базе . 825 853 . ввожу с клавы 8 . сумел получить перечень хвостов артикулов - то есть выборка такого вида получилась: . 25 53 . надо получить перечень уникальных цифр в этих "хвостах" - то есть хочу получить . 2 3 5 . (по этим цифрам будут подсвечиваться нужные кнопки для набора типа как в терминалах платежных) . Запрос: . ТекстЗапроса = "SELECT |Артикул, |TRIM(SUBSTR(Артикул,%ДлинаАртикулПлюсОдин%)) Хвост, |Descr Наименование |FROM Номенклатура |WHERE |SUBSTR(Артикул,1,%ДлинаАртикул%) = '%Артикул%'"; . где %Артикул% - набор первых цифр артикулов . спсб! |
|||
1
Злопчинский
20.10.12
✎
06:40
|
идея вроде бы такая - имеющийся запрос использовать как источник (подзапрос) - каждую запись результирующей выборки разлагать на цифры, получившуюся выборку сгруппировать до уникальных значений... как-то так себе представляю.. но мутно...
|
|||
2
orefkov
20.10.12
✎
06:44
|
where Артикул like '123%'
|
|||
3
Злопчинский
20.10.12
✎
06:45
|
(2) это замена SUBSTR - в услвоии...
|
|||
4
Злопчинский
20.10.12
✎
06:45
|
?
|
|||
5
el-gamberro
20.10.12
✎
06:47
|
Откуда 3 в задаче? Ведь она в третьем символе?
select DISTINCT SUBSTR(Артикул,1,@position+1) where patindex('8', Артикул) = @position |
|||
6
orefkov
20.10.12
✎
06:49
|
А на цифры разбивать и группировать их имхо лучше уже на клиенте, при обработке результата запроса.
|
|||
7
Злопчинский
20.10.12
✎
06:51
|
(5) О! это правильная идея! выдавать только следующие цифры!! да, это правильнО!!
|
|||
8
Злопчинский
20.10.12
✎
06:51
|
(6) дбф, в терминале, SQLite
|
|||
9
Злопчинский
20.10.12
✎
06:53
|
(5) но пока не вьехал в эти сложные слова что ты нарисовал.. морщу мозг...
|
|||
10
Злопчинский
20.10.12
✎
07:01
|
вот такой сделал с попроще записью...
ТекстЗапроса = "SELECT DISTINCT |SUBSTR(Артикул,%ДлинаАртикулПлюсОдин%,1) Хвост |FROM Номенклатура |WHERE |Артикул LIKE '%Артикул%'"; |
|||
11
Mikeware
20.10.12
✎
07:03
|
а может, тупо собирать в подзапросах n+1? n+2? и.т.п\д. цифры, а потом из них уже выбирать различающиеся?
|
|||
12
Злопчинский
20.10.12
✎
07:05
|
(11) запрос из (10) дает нужный результат
|
|||
13
Злопчинский
20.10.12
✎
07:05
|
patindex - пишет no such function: patindex
|
|||
14
Злопчинский
20.10.12
✎
07:09
|
навскидку в SQlite не нашел аналога patindex
|
|||
15
Злопчинский
20.10.12
✎
07:10
|
прока вроде (10) дает что надо...
|
|||
16
orefkov
20.10.12
✎
07:14
|
Select 1 where exist (select * from Номенклатура where Артикул like '123%1%')
union Select 2 where exist (select * from Номенклатура where Артикул like '123%2%') .... Можно примерно так, но тормозить будет жутко. Все таки лучше выбрать сами хвосты(при наличии сортировки по артикулу это влет where Артикул between 123 and 12399999) А уже хвосты обработать в 1С. |
|||
17
Злопчинский
20.10.12
✎
07:16
|
(16) спасибо за помощь!
ограничиваюсь (10) - при вводе очереднйо цифры дает перечень следующих цифр - мне этого достаточно! . спасибо всем за обучение! |
|||
18
Злопчинский
20.10.12
✎
07:17
|
номенклатуры мало - порядка 4000
запрос срабатывает быстро, гетпероформансекаунтер дает 0.008 сек |
|||
19
orefkov
20.10.12
✎
07:21
|
Условие поменяй на указанное в (16) - 1sqlite не оптимизирует like, с ним будет полный скан таблицы.
А с between 1230000 and 12399999 будет быстрый отбор по индексу. |
|||
20
Злопчинский
20.10.12
✎
07:28
|
(19) понял! учту!!!
|
|||
21
Злопчинский
20.10.12
✎
07:37
|
(19) а с учетом того, что артикул - это строка, надо писать
where Артикул between '123' and '12399999' - прокатит так? |
|||
22
Злопчинский
20.10.12
✎
07:42
|
Посмотрел синтаксические диаграммы - вроде должно прокатить.. сейчас попроьбуем
|
|||
23
Злопчинский
20.10.12
✎
07:51
|
(19) да, с битвином почти на порядок быстрее...
|
|||
24
Злопчинский
20.10.12
✎
10:22
|
у! наваял вчерновую макет для менеджеров на планшетник рабочее место... для хождения по шоуруму.. зашибись!
. вопрос закрыт. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |