AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.12.2018, 11:53   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Как в операторе LIKE задать маску содержащую квадратную скобку "*[*"?
В стандартном SQL в операторе LIKE квадратные скобки выполняют служебную функцию для задания более гибких шаблонов поиска. https://docs.microsoft.com/ru-ru/sql...rs-as-literals

В стандартном SQL символ квадратной скобки можно экранировать обрамив его в ещё одни квадратные скобки.

В Аксапте у меня не получилось использовать такой синтаксис.

Как в операторе LIKE задать маску содержащую квадратную скобку "*[*"?

Может кто сталкивался уже с такой проблемой и знает как её можно обойти?
Старый 18.12.2018, 13:54   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Видимо какой-то глюк с ESCAPE-последовательностью символов, открывающая скобка экранируется автоматически, закрывающая - нет.
Попробуйте такой workaround:
X++:
like '*[**'
Кстати, на временных таблицах он не работает.
__________________
// no comments
За это сообщение автора поблагодарили: Logger (3), S.Kuskov (5).
Старый 18.12.2018, 15:12   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,436 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от dech Посмотреть сообщение
Видимо какой-то глюк с ESCAPE-последовательностью символов, открывающая скобка экранируется автоматически, закрывающая - нет.
Попробуйте такой workaround:
X++:
like '*[**'
Кстати, на временных таблицах он не работает.
Да в select, который в SQL транслируется, и у меня хорошо отрабатывает. А внутренняя реализация в самой Аксапте нет.

Не срабатывает
X++:
    if ('fsd[fdsfs' like '*[**') 
        info(':)');
    else
        info(':(');
Старый 18.12.2018, 16:05   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,690 / 1192 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вообще, бред получается. Но работает как-то..

X++:
if ('fsd[fdsfs' like @'*\\[*') 
        info(':)');
else
        info(':(');
@ - учитывать обратный слеш как символ
\ - экранирование следующего за ним символа. Т.е. использовать его как обычный символ, а не спец.символ

Ага. А без "собаки" соответственно нужно 4 обратных слеша подряд

X++:
if ('fsd[fdsfs' like '*\\\\[*') 
        info(':)');
else
        info(':(');
Т.е. нужно передать внутрь оператора like квадратную скобку, предваряя его символом экранирования. А чтобы и символ экранирования был передан надо его самого экранировать. Вот и получается как в пути доступа
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 18.12.2018 в 16:20.
За это сообщение автора поблагодарили: dn (6), S.Kuskov (10).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Аксапта ограничивает размер строки-маски в операторе like размером фильтруемого поля S.Kuskov DAX: Программирование 13 17.02.2011 16:31
Задать критерий типа !="" bobski DAX: Программирование 3 29.12.2008 08:23
Использование "like" при работе с классом "QueryBuildRange" poul DAX: Программирование 18 11.08.2006 12:20
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like Pustik DAX: Программирование 15 03.07.2004 11:54
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:31.