Показать сообщение отдельно
Старый 17.02.2011, 10:41   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,448 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Аксапта ограничивает размер строки-маски в операторе like размером фильтруемого поля
Обнаружил сейчас неприятную особенность оператора like. Заключается она в следующем.

Допустим в таблице есть поле длиной 10 символов. В нём хранится значение занимающее полностью весь столбец, т.е. тоже длиной в 10 символов. Допустим это
"ABC0123456". Если попытаться отфильтровать его по условию like "*ABC0123456", то в результате получим пустую выборку. Потому что, на самом деле маска длиной 11 символов обрезается справа до длины поля, т.е до 10. В результате маска превращается в "*ABC012345".И если в таблице будут записи удовлетворяющие этому обрезанному критерию, то они выберутся. Если в маску добавить две звёздочки, то соответственно справа обрежутся уже два символа.

В начале я подумал, что это Аксаптовские проделки, но поэкспериментировав на SQL сервере обнаружил что проблема глубже.

Скорее всего для внутреннего представления значения маски SQL Server использует тот же самый тип данных, что и у поля, по которому происходит фильтрация.

В случае временных таблиц, работу с которыми аксапта реализует самостоятельно, всё работает корректно.