17.02.2011, 10:41 | #1 |
Участник
|
Аксапта ограничивает размер строки-маски в операторе like размером фильтруемого поля
Обнаружил сейчас неприятную особенность оператора like. Заключается она в следующем.
Допустим в таблице есть поле длиной 10 символов. В нём хранится значение занимающее полностью весь столбец, т.е. тоже длиной в 10 символов. Допустим это "ABC0123456". Если попытаться отфильтровать его по условию like "*ABC0123456", то в результате получим пустую выборку. Потому что, на самом деле маска длиной 11 символов обрезается справа до длины поля, т.е до 10. В результате маска превращается в "*ABC012345".И если в таблице будут записи удовлетворяющие этому обрезанному критерию, то они выберутся. Если в маску добавить две звёздочки, то соответственно справа обрежутся уже два символа. В начале я подумал, что это Аксаптовские проделки, но поэкспериментировав на SQL сервере обнаружил что проблема глубже. Скорее всего для внутреннего представления значения маски SQL Server использует тот же самый тип данных, что и у поля, по которому происходит фильтрация. В случае временных таблиц, работу с которыми аксапта реализует самостоятельно, всё работает корректно. |
|
Теги |
like, баг |
|
|