Имя: Пароль:
1C
1С v8
LIKE и знак подчеркивания
0 ezmemo
 
20.07.11
17:36
В запросе используется конструкция вида

И Док.Номенклатура.Наименование LIKE "%_%"  

Т.е. показать Номенклатуру где в наименовании есть символ "_".
Не работает.

Такое впечатление, что символ "_" служебный.

Вопрос: Как его экранировать, или сделать, чтобы запрос отрабатывал правильно?
1 Fragster
 
гуру
20.07.11
17:37
почитать встроенную справку не предлагать?
2 Fragster
 
гуру
20.07.11
17:37
Подобно
Данная операция проверяет соответствие строки переданному шаблону.

Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае.

Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:

% - процент: последовательность, содержащая ноль и более произвольных символов;
_ - подчеркивание: один произвольный символ;
[…] - один или несколько символов в квадратных скобках: один символ, любой из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона;
[^…] - в квадратных скобках значок отрицания, за которым следует один или несколько символов: любой символ, кроме тех, которые перечислены следом за значком отрицания;
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).

Например, шаблон

“%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\”

означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.
3 ezmemo
 
20.07.11
18:09
В моем случае это должно выглядеть так?

ГДЕ Док.Номенклатура.Наименование LIKE "%_0w%" СПЕЦСИМВОЛ("_")

тоже не правильно отрабатывает.
4 Живой Ископаемый
 
20.07.11
18:15
это какой-то ужас...

ГДЕ Док.Номенклатура.Наименование LIKE "%\_%"
5 Живой Ископаемый
 
20.07.11
18:18
не, вру. :) прошу прощения
6 Живой Ископаемый
 
20.07.11
18:19
ДЕ Док.Номенклатура.Наименование LIKE "%[_]%"
7 Fragster
 
гуру
20.07.11
18:20
мля, в (2) даже нужный пример написан...
8 Reset
 
20.07.11
18:20
Например, шаблон

“%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\”
9 Reset
 
20.07.11
18:21
LIKE "%\_%" ESCAPE "\"
10 Живой Ископаемый
 
20.07.11
18:23
9 и 6 - равнозначны...
11 Reset
 
20.07.11
18:27
(10) (6) - имхо читабельней

(9) придется, видимо, применять, если нужно ] указывать как символ внутри [ ] :)
12 Reset
 
20.07.11
18:32
Зато \_ теоретически может быть производительней чем [_], т.к. это один символ, а не набор. Хотя зависит от оптимизатора этих выражений. Тестировать лень)
13 Fragster
 
гуру
20.07.11
18:33
1с как всегда не доделало... CAST 90% преобразований не умеет, вместо регулярок огрызок какой-то...
14 Живой Ископаемый
 
20.07.11
18:38
2(12) запрос все равно выполняет сервер СУБД.. так что скорость может разнится от десятка параметров.и потери вносимые "оптимизатором выражений" потеряются на фоне них
15 ezmemo
 
21.07.11
11:59
(2)(6)(9) Спасибо.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой