v8: Как определить длину строки в запросе? #487506


#0 by Виталий
Подскажите, пож., есть ли в языке запросов функция определения длины текстового поля, по аналогии с len в TSQL? Если нет, то как тогда можно определить длину поля?
#1 by IronDemon
Зачем?
#2 by Ненавижу 1С
нет, определить на клиенте
#3 by Виталий
Нужно отфильтровать записи по длине значения в одном реквизите
#4 by Maxus43
в запросе никак, отфильтруй уже в результате запроса выкинутого в ТЗ например
#5 by Виталий
Ясно, спасибо!
#6 by Живой Ископаемый
2 если в качестве СУБД используется не ДБ2, то можно при помощи "ПОДОБНО [_столько подчеркиваний, сколько символов в строке__]"
#7 by Живой Ископаемый
а, или даже в ДБ2 будет такое рабоать
#8 by Виталий
Это тема! Мозг! :)
#9 by Живой Ископаемый
НАДмозг, ага. :) только вроде без квадратных скобок просто вот так "ПОДОБНО _столько подчеркиваний, сколько символов в строке__" ==== Оператор проверки строки на подобие шаблону Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ. Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки: % (процент): последовательность, содержащая любое количество произвольных символов _ (подчеркивание): один произвольный символ […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон “%АБВ[0-9][абвг]_абв%” СПЕЦСИМВОЛ “” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов.
#10 by Maxus43
прикольно, не пришло в голову использование этого для этого .)
#11 by Живой Ископаемый
2 я просто как-то, когда искал вопросы для собеседования, нашел такую задачку: как запросом отобрать элементы справочника номенклатуры, в наименовании которых 3 слова (то есть если два слова или четыре - то не нужно...)
#12 by Виталий
Ну, ты меня что ли совсем за юзера считаешь? :) Я с SQL 2,5 года работал. Это я с 1С только недавно начал дружить :) Поэтому я понимаю как работает ПОДОБНО :)
#13 by Elena_KR
а если нужно знать именно длину поля?
#14 by Живой Ископаемый
2 это я для себя. :)
#15 by luns
ха. недавно в одном тесте была такая задача.
#16 by Виталий
Не ожидал, что проблема так всем близка :)
#17 by Живой Ископаемый
2 вот из них кажется и брал.
#18 by Виталий
Подозреваю, что это уже нужно делать после выполнения запроса
#19 by Живой Ископаемый
2 просто когда только начал изучать в8 решил написать конфу, в которой бы хранились художественные тексты на английском языке, и к которым можно было бы строить запросы с ПОДОБНо чтобы искать примеры употребления тех или иных слов.
#20 by Elena_KR
как бы было хорошо, если бы была такая агрегатная функция в запросе )))
#21 by МихаилМ
Когда Наименование =  ПОДСТРОКА ( Наименование,1, 88) Тогда 88 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 1) Тогда 1 .... Когда Наименование =  ПОДСТРОКА ( Наименование,1, 90) Тогда 90 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 91) Тогда 91 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 92) Тогда 92 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 93) Тогда 93 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 94) Тогда 94 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 95) Тогда 95 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 96) Тогда 96 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 97) Тогда 97 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 98) Тогда 98 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 99) Тогда 99 Когда Наименование =  ПОДСТРОКА ( Наименование,1, 100) Тогда 100
#22 by luns
Ага а когда
#23 by Maxus43
а зачем? такие задачки очень редки, и можно просто в коде результат запроса обработать...
#24 by Jstunner
все таки интересный этот язык запросов, но когда вот так вот, простейшие вещи можно сделать только через задницу, начинаешь понимать
#25 by Maxus43
Запрос есть Запрос, получает данные, изврат типа - редко и вроде и не надо даже делать именно в запросе... Протестую против захламления языка запросов ненужными функциями!
#26 by Maxus43
+ итак умудряются такие запросы писать, что хочется выкинуться из окна, а если дать ещё и кучу функций ненужных...
#27 by Живой Ископаемый
2 а что больше - "я" или "аа"?
#28 by vladnet
сейчас пришло в голову что тоже самое можно сделать бинарным делением пополам, тогда будет меньше условий )
#29 by Elena_KR
редки, но метки. Я с позиций написания СКД-шных отчетов, запихнул запрос и все гуд
#30 by acsent
Меньше не будет, будет просто дерево кустистое
#31 by Ахиллес
почему в TSQL эти функции нужные, а в 1С оказались не нужные?
#32 by acsent
В 1С посчитали подругому
#33 by acsent
Можно примеры, когда они нужные?
#34 by Elena_KR
решили не заморачиваться наверное
#35 by Ахиллес
Не ко мне вопрос. Не я же TSQL создавал. Если есть, значит были основания для включения в язык.
#36 by hhhh
разные задачи перед собой ставили разработчики TSQL и 1С.
#37 by Ахиллес
Вот в это поверю. Кишка тонка оказалась, решили не заморачиваться.
#38 by Ахиллес
Я сейчас только о реализации SQL языка в восьмерке.
#39 by hhhh
вы просто забыли о самом главном. Должна быть полная совместимость SQL- и файловой версии 1С.
#40 by vladnet
Да но должно быть быстрее, хотя кто его знает как SQL работает Впрочем я тестировал вариант такие запросы писать, в итоге решил что это плохо - быстродействие падает в разы, так что проще на клиенте обработать.
#41 by Виталий
По поводу высказываний, что многие функции в 1С не нужны, что можно заморочится сложным построением запроса - и все будет работать... Но вы забываете, что в таких случаях перестают работать индексы. В итоге страдает скорость выполнения запросов. Иначе - нужно усложнять логику кода 1С, что бы обработать результат запроса. Тоже не вариант. Поэтому, соглашусь с тем, что это минус для 1С
#42 by Живой Ископаемый
на самом деле неужно помнить что 1С - для автоматизации прежде всего финансового учета... Придумайте реальную учетную задачу, когда бы нам понадобилось  - что? сгруппировать данные по длине наименования? это вообще смешно.. Если у вас от длины наименования зависит бизнес-логи - вряд ли это правильно... Нужно нормализовать это как-то... А нормализовать - это один раз написать и выполнить обработку.
#43 by acsent
Если от длины поля что-то зависит, то добавь доп. реквизит: длина
#44 by Живой Ископаемый
2вот-вот. это и имел в виду.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям