|
Обработка строк из цифр в запросе | ☑ | ||
---|---|---|---|---|
0
User_Agronom
15.09.15
✎
21:08
|
Есть две таблицы. Нужно соединить эти таблицы (например, левым соединением) по полю КодАБС
Проблема состоит в том, что значения в поле КодАБС имеют различное количество первых нулей. Кроме того, они имеют различную длину. Вопрос: каким-нибудь образом можно обработать это в запросе? Пример: Поле в таблице А 000123, а в таблице Б 0123. Или в таблице А 5879, а в таблице Б 05879. |
|||
1
hhhh
15.09.15
✎
21:15
|
сделать изначально нормальные таблицы с нормальными кодами.
|
|||
2
badboychik
15.09.15
✎
21:15
|
Удалить нули в обеих и все
|
|||
3
Ildarovich
15.09.15
✎
21:18
|
Вот статья http://catalog.mista.ru/public/170336/ . Там есть нужный вам запрос. Он первый по порядку. Запрос преобразует строку цифр в число. Отбрасывая, кстати, буквы и незначащие нули.
|
|||
4
User_Agronom
15.09.15
✎
21:36
|
(3) Куча ПОДОБНО. Это теория пример.
С ПОДОБНО я и тут могу справиться. левое соединение ... по ТаблА.Поле подобно ТаблБ.Поле или ТаблБ.Поле подобно ТаблА.Поле Можно без ИЛИ через объединить все. |
|||
5
Ildarovich
15.09.15
✎
22:02
|
(4) не понял про "кучу ПОДОБНО". В приведенном в (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) |СГРУППИРОВАТЬ ПО Дано.НомерСтроки |; ВЫБРАТЬ Дано.НомерСтроки, Дано.КодАБС КАК Строка |ПОМЕСТИТЬ ДаноБ |ИЗ ТаблБ КАК Дано |; |ВЫБРАТЬ Дано.НомерСтроки, СУММА(А.П * Б.С) / МИНИМУМ(А.П) КАК ЧислоАБС |ПОМЕСТИТЬ ВТаблБ |ИЗ ДаноБ КАК Дано, Р16 КАК А, Р16 КАК Б |ГДЕ Б.С < 10 И ПОДСТРОКА(Дано.Строка, 17 - А.С, 1) = ПОДСТРОКА(""0123456789"", Б.С + 1, 1) |СГРУППИРОВАТЬ ПО Дано.НомерСтроки |; В итоге в ВТаблА и ВТаблБ есть поля ЧислоАБС, очищенные от ведущих нулей и букв, по которым можно делать соединение |
|||
6
Aleksandr N
16.09.15
✎
00:15
|
(0) Обработать таблицы перед запросом?
|
|||
7
ИС-2
naïve
16.09.15
✎
06:52
|
(6) +1. Лмбо использовать 2 набора данных СКД
Посмотрите на функции запросов, например использовать символ для поиска текста %. Но как будет работать такое чудо - хз. http://helpme1c.ru/funkcii-v-zaprosax-v-1s-8-v-primerax |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |